function findAllCombo(){
var res=[];
function computeRecursively(newStr="", locks, startIndex=0){
//Base case
if(startIndex === locks.length){
res.push(newStr);
return res;
}
// The digits have to be choosen form 0-5. So we recursively call for each of the
// digits. We can use loop as well.
computeRecursively(newStr+0, locks, startIndex+1);
computeRecursively(newStr+1, locks, startIndex+1);
computeRecursively(newStr+2, locks, startIndex+1);
computeRecursively(newStr+3, locks, startIndex+1);
computeRecursively(newStr+4, locks, startIndex+1);
computeRecursively(newStr+5, locks, startIndex+1);
return res;
}
//This defines the lock- place to hold each digit
var locks = new Array(4);
return computeRecursively("", locks, 0)
}
console.log(findAllCombo())
您可以为数字创建一个数组,并递增前面的数字,直到找到不是 9 的数字,就像通常递增数字一样:
以下是如何递归地解决该问题。
我们需要将问题划分为子问题,并找到我们可以解决的最小子问题的解决方案。
这给出了我们的基本情况,即对于
0
数字引脚,我们将有""
现在让我们将问题分解为子问题并尝试解决它。我们用 尝试引脚的第一位数字
0
,然后我们只需解决其余三位数字的问题。如果我们尝试使用第一个数字1
等等,情况也是如此。那么让我们继续这个
这是我的方法,我可能让它变得比它必须的更复杂。我更专注于正确使用递归(没有全局变量,函数返回最终结果或对其自身的调用)。
如果可以是变量,则需要其中的循环
for
(或者至少需要另一个递归函数) 。digitsCount
这种方法的主要驱动力是使用模数 (
%
) 和flag
变量来进行计数range
(在本例中为基于5)。