Algorithm 该算法的时间/空间复杂度,以查找电话号码的字母组合?

Algorithm 该算法的时间/空间复杂度,以查找电话号码的字母组合?,algorithm,time-complexity,space-complexity,Algorithm,Time Complexity,Space Complexity,我不确定它的时间/空间复杂性,因为尽管它有一个双for循环O(n^2),在for循环O(n)中,所以O(n^3),它也有一个数字并生成字母排列,就像O(n个数字x个字母的排列) /** *@param{string}位 *@return{string[]} */ var permutate=函数(电流组合,下一个){ var结果=[]; 对于(var i=0;i

我不确定它的时间/空间复杂性,因为尽管它有一个双for循环O(n^2),在for循环O(n)中,所以O(n^3),它也有一个数字并生成字母排列,就像O(n个数字x个字母的排列)

/**
*@param{string}位
*@return{string[]}
*/
var permutate=函数(电流组合,下一个){
var结果=[];
对于(var i=0;i”,结果);
返回结果;
}
var字母组合=函数(数字){
如果(数字==“”)返回[];
var phoneMap=[“0”、“1”、“abc”、“def”、“ghi”、“jkl”、“mno”、“pqrs”、“tuv”、“wxyz”];
var结果=[“”];
对于(变量i=0;i['ad','ae','af','bd','be','bf','cd','ce','cf']

假设您不会对同一个i使用
phoneMap[i]
两次,即最终调用是
字母组合(“0123…len(phoneMap)-1”)

那么我认为a[x]是phoneMap[x]的长度

考虑调用
字母组合(“012”)
,并让
phoneMap[1]、phoneMap[2]、phoneMap[3]的长度分别为3,5,2

然后您将执行
O(1)
推送
1*3+1*3*5+1*3*5*2
次,即

a[0]+a[0]a[1]+a[0]a[1]a[2]
其中
a=[len(电话地图[0])、len(电话地图[1])、len(电话地图[2])


如果可以接受较小的限制,我将假设您可以重用
phoneMap[I]
,那么上面的复杂性可以简化为:L是
phoneMap
中最长的字符串,n是传递到
字母组合中的数字长度


因为上面的公式将变成简单的几何和,比如说
L=5
,你调用
字母组合(“5555”)
,那么和就是
5+5*5+5*5+5*5*5*5*5
=
5*(5^(n)-1)/(5-1)
=
O(5^n)

一个数字可以用两次吗?例如:字母组合(“111122223331123”)
/**
 * @param {string} digits
 * @return {string[]}
 */

var permutate = function(currentCombinations, nextLetters) {
    var results = [];

    for (var i = 0; i < currentCombinations.length; i++) {
       for (var j = 0; j < nextLetters.length; j++) {
           results.push(currentCombinations[i] + nextLetters[j]);
       }
    }

    console.log(currentCombinations, '+', nextLetters, '=>', results);

    return results;
}

var letterCombinations = function(digits) {
    if (digits === "") return [];

    var phoneMap = ["0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"];

    var result = [""];

    for (var i = 0; i < digits.length; i++) {
        var letterMappingsForDigit = phoneMap[digits[i]];
        result = permutate(result, letterMappingsForDigit);
    }

    return result;
};

letterCombinations("23");
// => [ 'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf' ]