每日一題 82 電話號碼對應的英語單詞

2021-06-18 01:00:46 字數 1405 閱讀 2071

題目和思路來自程式設計之美

題目:**的號碼盤一般可以用於輸入字母,而且乙個數字可以對應多個或者0個字母。如用2可以輸入a、b、c,用3可以輸入d、e、f等。

給出乙個號碼,它可以對應許多個字母組合。如號碼5869872,它對應的字母組合可以是jtmwtpta、jtmwtb······

問題(1)給出乙個**號碼,設計程式,從該**號碼對應的這些字母組合中,找到乙個有意義的單詞來表述乙個**號碼。

舉例:單詞"computer"來描述號碼26678837。

問題(2)對於乙個號碼,是否可以用乙個單詞代表?(否)怎樣才是最快的方法?

綜合這兩個問題,其實就是找出最快的方法,使得找到乙個有意義的單詞與數字對應?

思路:方法(1)對字母集合進行深搜 + 字典匹配

<1>直接對每乙個數字對應的字母集合進行深搜,類似元素的組合求出所有字母集合

<2>對每一種組合都與字典匹配,有意義則輸出

**:這裡指給出深搜求字母組合的遞迴**

#include #include using namespace std;

void perm(char strset[10][10],int narrtelenum,int nlen,int ncur,int npos,char strword)

perm(strset,narrtelenum,nlen,0,0,strword);

system("pause");

return 1;

}

迭代**:

書中給出了乙個不確定迴圈個數的**,挺有意思。可以一看。

#includeusing namespace std;

const int maxlength = 9;

char c[10][10] = ;

int total[10] = ;

int main()

; //本例輸入數字3,4,5

int answer[maxlength] = ;

int len = 3;

while(true)

else//第k位的數已經全部放完,此時需要設定第k - 1位。

}if(k < 0)//所有元素均處理完了。

break;

} return 0;

}

方法(2)離線

求出每乙個數字組合對應的字母組合

字典匹配

這裡**不再給出。

方法(3)字典單詞轉化為數字 + 與給出數字進行匹配

思路:把字典中的單詞轉換為數字,之後把轉換後的數字與給出的數字進行匹配。

這裡**不再給出。

電話號碼對應英語單詞

號碼盤一般可以用於輸入字母,如2可以輸入a b c,等等。要求設計號碼所對應的所有組合。如5969872可以對應 jtmwtpa jtmwtpb等。這就相當於排列數,如5對應j k l,以j k l各自引出9對應的w x y z這些數字的組合就構成一棵樹。我們可以構建乙個二維陣列charc 10 1...

電話號碼對應英語單詞

題目描述 實現 public class recursivesearch 0 0表示空字元 1 2 3 4 5 6 7 8 9 static int total 分別表示0 9所代表的字元的個數 public static void main string args 假設 號碼為234,number...

LeetCode每日一題 電話號碼 回溯演算法

輸入法九鍵,每個按鍵都代表著不用的字母,我們需要找到不同字影射,來進行不同序列的組成。如下是leetcode第十七題。給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be...