የስልክ ቁጥር ደብዳቤ ጥምረት


የችግር ደረጃ መካከለኛ
ውስጥ በተደጋጋሚ ተጠየቀ አማዞን ፓም Atlassian አቢይ አንድ የመረጃ ቋቶች eBay ፌስቡክ google የ Microsoft ሞርጋን ስታንሊ በ Oracle Qualtrics ቴሊዮ በ Uber VMware የዎልማርት ላብራቶሪዎች
ወደ ኋላ መመለስ ጥልቀት የመጀመሪያ ፍለጋ ዳግም መጥፋት ሕብረቁምፊ

በስልክ ቁጥር ችግር በደብዳቤ ውህዶች ውስጥ ሀ ክር ቁጥሮችን ከ 2 እስከ 9 ያካተተ ነው ችግሩ እያንዳንዱ ቁጥር የተወሰኑ ፊደሎች ካሉት በዛ ቁጥር ሊወከሉ የሚችሉ ሁሉንም ሊሆኑ የሚችሉ ውህደቶችን መፈለግ ነው ፡፡ የቁጥሩ ምደባ ከዚህ በታች ተሰጥቷል ልክ እንደ የስልክ ቁልፎች ፡፡

የስልክ ቁጥር ደብዳቤ ጥምረት

እዚህ ለ 1 ምንም ደብዳቤ ያልተሰጠ መሆኑን ልብ ይበሉ

ለምሳሌ

"23"
["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

የተመደቡት ደብዳቤዎች "2" ናቸው “ኢቢሲ” እና "3" ናቸው “ዲኤፍ” ስለዚህ የፊደላት ጥምረት “ማስታወቂያ” ፣ “ae” ፣ “af” ፣ “bd” ፣ “be” ፣ “bf” ፣ “cd” ፣ “ce” እና “cf” ይሆናል

አልጎሪዝም

  1. ያውጅ ሀ ተራ እና የድርድር ዝርዝር እና ሕብረቁምፊ ደርድር.
  2. የሕብረቁምፊ ድርድር እሴቶችን እንደ የተሰጠው የሕብረቁምፊ ቁልፍ ማከማቸት አለበትWWords [10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", " wxyz ”};
  3. መጀመሪያ ላይ አንድ ባዶ ክር ወደ ወረፋ ይግፉ
  4. ወረፋ በውስጡ አንዳንድ እሴቶች ያሉት ቢሆንም ከሉፉ በላይ ይደጋገማል።
  5. የወረፋውን የፊት ዋጋ ወደ ጊዜያዊ ገመድ ያከማቹ
  6. ጊዜያዊ የሕብረቁምፊ ርዝመት ከ n ጋር እኩል ሆኖ ከተገኘ (ይህም የግብአት እሴት ርዝመት ነው) ከዚያ
  7. የዝርዝሩ ጊዜያዊ ሕብረቁምፊ እሴት ያክሉ።
  8. ሌላ ፣ የሕብረቁምፊ እሴት እንደ ቅጅ = ቁልፎች [ቁጥር [temp.length ()]] የተጀመረበትን ሉፕ ይክፈቱ;
  9. በእያንዳንዱ ቁልፍ ቃል ቁልፍ (0, 1) ላይ የቴምፕ ቴምብርን ያክሉ እና ወረፋው ውስጥ ይግፉት ፡፡
  10. ወረፋው በውስጡ እሴቶች እስከሚኖራቸው ድረስ በላዩ ላይ ይበሳጫል።
  11. የመመለሻ ዝርዝር

ማስረጃ

እንደ 23. ግብዓት ተሰጠን እንበል ከዚያም ወደ ኢንቲጀር እንለውጠዋለን ፡፡ እና እንዳገኘነው በተመሳሳይ መልኩ ወደ አሃዞች ድርድር ይለውጡት ፡፡ እናም የዚያን የግብዓት እሴት የግብዓት እሴት እና ርዝመት እንደ ጥምር በስም ወደሰራነው ተግባር እናልፋለን ፡፡

በዚያ ተግባር ውስጥ እኛ ቁልፍ ቃላቶቻችንን ቁልፍ ቁልፍ ቃላትን ጀመርን [10] = {“” ፣ “” ፣ “abc” ፣ “def” ፣ “ghi” ፣ “jkl” ፣ “mno” ፣ “pqrs” ፣ “tuv” ፣ “ wxyz ”}

እነዚህን እሴቶች የምናወጣው ውጤቱን የምናገኝበት getCombination በሚባል ሌላ ተግባር ውስጥ ነው ፡፡

ስለዚህ በቅደም ተከተል በ {23 ፣ 2 ኢንዴክስ / ድርድር = {3, 0} ውስጥ ይከማቻል 1 እንደ ምሳሌ እንወስዳለን ፡፡

ስለዚህ አሁን በአንድ ተግባር ውስጥ እኛ ምርታችንን የሚያከማች ወረፋ እና ዝርዝር አውጀናል ፡፡

ባዶ ገመድ ወደ que እንገፋለን;
que = “”;

ውስጥ መግባት ዘንበል እያለእኛ የወረፋውን ፊት ለፊት ወደ ቴምፕሬሽኑ እናመጣለን እና ከ ‹que› እናውቃለን ፡፡
ቴምፕ = “”

እሴቶቹ ከቴምፕ እና n የተለዩ በመሆናቸው አንድ ክፍል የማይፈጽም ከሆነ ፡፡ ስለዚህ ያንን የሚያከናውን ሌላ ክፍል ያስፈጽማል
ቅጅ = temp.length = 0 => ቁጥር [0] = 2 => ቁልፎች [2] = “abc”
ይህም ማለት ኮፒ = "abc";

አሁን ለክፍለ-ነገር ያበጃል
እና ወረፋውን በ ፣ ቢ እና ሐ ውስጥ ይጨምሩ።

አሁን እንደገና (! Que.isEmpty ()) እያለ ይፈትሻል እና እውነት ነው እናም እሱ ይቀጥላል እና “a” በሆነ የሙቀት መጠን ወረፋ ፊት ለፊት ይወስዳል እና ሀን ያስወግዳል።
ቅጅ = temp.length = 1 => ቁጥር [1] = 3 => ቁልፎች [3] = “def”
ስለዚህ አሁን ከ d ፣ e እና f ጋር ተያይዞ በቅደም ተከተል በወረፋ ይገፋፋዋል ፡፡

አሁን እንደገና (! Que.isEmpty ()) እያለ ይፈትሻል እና እውነት ነው ስለሆነም ይቀጥላል እናም አሁን “ለ” በሆነ ወረፋ ውስጥ የወረፋውን ፊት ይወስዳል እና ለ.
ቅጅ = temp.length = 1 => ቁጥር [1] = 3 => ቁልፎች [3] = “def”
ስለዚህ አሁን ከ d ፣ e እና f ጋር ተያይዞ በቅደም ተከተል ወረፋ ይገፋፋዋል ፡፡

አሁን እንደገና (! Que.isEmpty ()) እያለ ይፈትሻል እና እውነት ነው ስለዚህ እሱ ይቀጥላል እና “ሐ” በሆነ የሙቀት መጠን ወረፋ ፊት ይወስዳል እና ሐ.
ቅጅ = temp.length = 1 => ቁጥር [1] = 3 => ቁልፎች [3] = “def”
ስለዚህ አሁን ከ d ፣ e እና f ጋር በመደመር በወረፋ ይገፋፋዋል ፡፡

አሁን በሙከራው ጊዜ የወረፋውን ፊት የሚወስድ ከሆነ እና ያንን የሙቀት መጠን ከ n ጋር እኩል ነው ካገኘ። እና የሙቀት መጠኑን ይጨምሩ እና በቅደም ተከተል እኛ የምናገኛቸውን እያንዳንዱን ጥምረት ይጨምራል ፡፡
ውጤቱን እናገኛለን-(ማስታወቂያ ፣ ኤኤ ፣ አፍ ፣ ቢዲ ፣ ቢ ፣ ቢኤፍ ፣ ሲዲ ፣ ሲኤ ፣ ሲኤፍ)

አፈጻጸም

የስልክ ቁጥር ደብዳቤ ጥምረት ለማግኘት የ C ++ ፕሮግራም

#include<iostream>
#include<queue>
#include<sstream>
using namespace std;

vector<string> getCombination( int inputValue[], int n, string keyWords[])
{
    vector<string> list;

    queue<string> que;
    que.push("");

    while (!que.empty())
    {
        string temp = que.front();
        que.pop();
        if (temp.length() == n)
            list.push_back(temp);
        else
            for (auto getword : keyWords[inputValue[temp.length()]])
                que.push(temp + getword);
    }

    return list;
}

void combination( int inputValue[], int n)
{

    string keyWords[10]
        = { "", "", "abc", "def", "ghi", "jkl",
            "mno", "pqrs", "tuv", "wxyz"
          };

    vector<string> list= getCombination(inputValue, n, keyWords);

    for (auto word : list)
        cout << word << " ";

    return;
}

int main()
{
    string s="23";
    stringstream comb(s);
    int le=s.length();
    int inputValue[le];
    int i=0,x=0;
    comb>>x;
    while(x>0)
    {
        inputValue[le-i-1]=x%10;
        x/=10;
        i++;
    }
    int lengths = sizeof(inputValue) / sizeof(inputValue[0]);

    combination(inputValue, lengths);
    return 0;
}
ad ae af bd be bf cd ce cf

የስልክ ቁጥር ደብዳቤ ጥምረት ለማግኘት የጃቫ ፕሮግራም

import java.util.*;

class combinationNumber {
  static ArrayList<String> getCombination(int[] number, int n, String[] keys) {
    ArrayList<String> getList = new ArrayList<>();

    Queue<String> que = new LinkedList<>();

    que.add("");

    while (!que.isEmpty()) {
      String temp = que.remove();

      if (temp.length() == n)
        getList.add(temp);
      else {
        String copy = keys[number[temp.length()]];
        for (int i = 0; i<copy.length(); i++) {
          que.add(temp + copy.charAt(i));
        }
      }
    }
    return getList;
  }

  static void combination(int[] inputValue, int n) {
    String[] keyWords = {
      "", "", "abc", "def", "ghi", "jkl",
      "mno", "pqrs", "tuv", "wxyz"
    };

    ArrayList<String> output = getCombination(inputValue, n, keyWords);

    for (int i = 0; i<output.size(); i++) {
      System.out.print(output.get(i) + " ");
    }
  }

  public static void main(String args[]) {
    String s = "23";
    int numb = Integer.valueOf(s);
    int i = 0;
    int[] inputValue = new int[s.length()];
    while (numb > 0) {
      inputValue[s.length() - i - 1] = numb % 10;
      numb /= 10;
      i++;
    }

    int lengths = inputValue.length;
    combination(inputValue, lengths);
  }
}
ad ae af bd be bf cd ce cf

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (3N × 4M) የት N 3 ቁጥሮች የተመደበለት ቁጥር (ለምሳሌ: 2,3,4) ያለው ሲሆን M ደግሞ የተመደበለት 4 ፊደላት ያሉት ቁጥር (ለምሳሌ 7,9) ነው ፡፡

የቦታ ውስብስብነት

ኦ (3N × 4M) የት N 3 ቁጥሮች የተመደበለት ቁጥር (ለምሳሌ: 2,3,4) ያለው ሲሆን M ደግሞ የተመደበለት 4 ፊደላት ያሉት ቁጥር (ለምሳሌ 7,9) ነው ፡፡