Skip to content

017 电话号码的字母组合

code

javascript
/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    let result = [];
    const alpha_map = { 
        2: ['a','b','c'],
        3: ['d','e','f'],
        4: ['g','h','i'],
        5: ['j','k','l'],
        6: ['m','n','o'],
        7: ['p','q','r','s'],
        8: ['t','u','v'],
        9: ['w','x','y','z'],
    }
    function backtrace(temp, ind){
        if(temp.length === digits.length){
            result.push(temp);
            return;
        }
        let digit = alpha_map[digits.charAt(Number(ind))];
    
        for(let i = 0; i < digit.length; i++){
          
            backtrace(temp + digit[i], (ind + 1));
        }
    }
    backtrace('', 0);
    return result;
};

总结

  1. 回溯真的很反直觉,说是剪枝实际上是断路,我感觉每一个共同结构都看不明白,提不出来啥,找猫画虎
  2. 但这个似乎和遍历,子集哪个有点像
  3. 感觉不太容易出这个题,不是很优雅似乎
  4. 注意不回退,然后字符串每一圈改内存的问题
  5. 刷回溯时候可以注意看一下写一下