17. 電話號碼的字母組合

17. 電話號碼的字母組合

給定一個僅包含數(shù)字 2-9 的字符串践叠,返回所有它能表示的字母組合恭垦。答案可以按 任意順序 返回。
給出數(shù)字到字母的映射如下(與電話按鍵相同)众雷。注意 1 不對應任何字母蒙兰。

示例.png
2對應abc      3對應def  ...  9對應wxyz

分析:
其實就是給定一個數(shù)字組合的字符串,讓我們轉換成對應的所有字母組合排列;
有一個隱形條件就是雖然一個數(shù)字對應的是多個字母缝其,但一次只能拿出一個字母來配對,就像電話按鍵輸入一樣

思路:

考慮使用DFS(Depth-first search 深度優(yōu)先搜索)來解決此類問題徘六,很多排列組合相關的問題内边,都可以通過DFS來解決


class Solution {

    private char[] cs;//字符數(shù)組
    private List<String> list;//最終存放字符組合的數(shù)組
    //記錄每一層選擇的字母,一趟結束后再轉成字符串就是一個字母組合咯
    private char[] strings;
    //數(shù)字字母對照表
    private char[][] lettersArray = {
       {'a','b','c'},{'d','e','f'},{'g','h','I'},
       {'j','k','l'},{'m','n','o'},{'p','q','r','s'},
       {'t','u','v'},{'w','x','y','z'}
    };

    public List<String> letterCombinations(String digits) {
       
       //1.字符串為空 沒有意義
       if(digits == null) return null;
 
       //1.1 定義一個最終存放字符組合的數(shù)組
       list = new ArrayList<>();
       //1.2 轉字符數(shù)組
       cs = digits.toCharArray();
       //1.3 digits是空字符待锈,直接返回 list
       if(cs.length==0) return list;
       //1.4 字母組合數(shù)組的長度和cs等長即可
       strings = new char[cs.length];

       //2. 搜索字母組合
       dfs(0);

       //3. 返回字符組合的數(shù)組
       return list;

    }

    //私有 沒有返回值 深度優(yōu)先搜索
    //idx: 正在搜索第idx層
    private void dfs(int idx) {

        //1.已經(jīng)進入最后一層了 不能再深入 存起來得到的值
        if(idx==cs.length) {
            //得到一個正確的解漠其,就添加到數(shù)組中
            list.add(new String(strings));
            return;
        }

       //數(shù)字字符
       char digit = cs[idx];
       //數(shù)字字符減去'2'就是對應索引 (2~0  3~1 4~2 ...) 就得到  所有能選擇的字母
       char[] letters = lettersArray[digit - '2'];
       //2. 先枚舉這一層可以做的所有選擇
       for(char letter : letters){
        //取出其中一個字符記錄下來
         strings[idx] = letter;
         //下一層 自動回溯
         dfs(idx + 1);

       }

    }

}

執(zhí)行結果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市竿音,隨后出現(xiàn)的幾起案子和屎,更是在濱河造成了極大的恐慌,老刑警劉巖春瞬,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柴信,死亡現(xiàn)場離奇詭異,居然都是意外死亡宽气,警方通過查閱死者的電腦和手機随常,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門潜沦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人线罕,你說我怎么就攤上這事止潮。” “怎么了钞楼?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵喇闸,是天一觀的道長。 經(jīng)常有香客問我询件,道長燃乍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任宛琅,我火速辦了婚禮刻蟹,結果婚禮上,老公的妹妹穿的比我還像新娘嘿辟。我一直安慰自己舆瘪,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布红伦。 她就那樣靜靜地躺著英古,像睡著了一般。 火紅的嫁衣襯著肌膚如雪昙读。 梳的紋絲不亂的頭發(fā)上召调,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音蛮浑,去河邊找鬼唠叛。 笑死,一個胖子當著我的面吹牛沮稚,可吹牛的內容都是我干的艺沼。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蕴掏,長吁一口氣:“原來是場噩夢啊……” “哼障般!你這毒婦竟也來了?” 一聲冷哼從身側響起囚似,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎线得,沒想到半個月后饶唤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡贯钩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年募狂,在試婚紗的時候發(fā)現(xiàn)自己被綠了办素。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡祸穷,死狀恐怖性穿,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情雷滚,我是刑警寧澤需曾,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站祈远,受9級特大地震影響呆万,放射性物質發(fā)生泄漏。R本人自食惡果不足惜车份,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一谋减、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扫沼,春花似錦出爹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伴找,卻和暖如春盈蛮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背技矮。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工抖誉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衰倦。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓袒炉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親樊零。 傳聞我的和親對象是個殘疾皇子我磁,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內容