简单回溯
回溯法 呜呜呜呜找了两天的问题
var readBinaryWatch = function(turnedOn) {
let arr = [1,2,4,8,1,2,4,8,16,32];
let result=[],path=[];
let len = arr.length;
var backtrack = function(n,k,start){
if(path.length==k){
result.push([...path]);//[...path]必须,否则不保存,一直重复
console.log('答',result);
return ;
}
for(let i = start;i<n;i++){
path.push(arr[i]);
console.log(path,result);
backtrack(n,k,i+1);//i+1不会一直加,提前写i=i+1;
path.pop();
}
}
backtrack(len,turnedOn,0);
return result;
};
回溯法模板
全局变量
backtracking(参数,开始下标) {
if(终止条件){加入result;return;}
for(横向遍历i=开始下标){
操作,加入path;
backtracking();
撤回操作;
}
执行backtracking();
return result;
}
var readBinaryWatch = function(turnedOn) {
let arr = [1,2,4,8,1,2,4,8,16,32];
let result=[],path=[0,0];
let len = arr.length;
var backtrack = function(turnedOn,start,path){
if(path[0]>11||path[1]>59)return;
if(turnedOn==0){
let min = path[1]<10?`0${path[1]}`:path[1];
result.push(`${path[0]}:${min}`);
//console.log('aa',result);
return;
}
for(let i = start;i<len;i++){
console.log(start,i,arr[i]