回溯算法
类似尝试枚举的搜索方式,当找到不符合条件的解时候,就回溯返回,尝试别的路径
常用步骤
-
开头写好条件,满足条件才加入总结果中
-
已经拿过的数不再拿
-
向下遍历,进行回溯
function def (aray) {
if () {
//满足条件add进去
return;
}
for( item in array) {
if () {
//去掉已经拿过的数
continue;
}
满足条件干什么 add
def () // 向下进行递归遍历
否则回溯
}
}
例子:
var solution = function (list) {
var isConfict = function (row, clo, value) {
}
var fillData = function (i, j){
if (j === 9) {
i++;
j = 0;
if (i === 9) {
return true;
}
}
if (list[i][j] !== '.') {
return list[i][j+1];
}
for (let num = 1; num <=9; num ++) {
if (isConfict(i, j, String(num)) {
continue;
}
list[i][j] = k;
if (list[i][j+1]) {
return true;
}
list[i][j] = '.';
}
}
fillData(0,0);
return list;
}