回溯的想法:
力扣46-全排列
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
let list = []
function backTrack(list, tmp, nums) {
if (tmp.length === nums.length) {
return list.push([...tmp])
}
for(let i = 0; i < nums.length; i++) {
if (tmp.includes(nums[i])) {
continue
}
tmp.push(nums[i])
backTrack(list, tmp, nums)
tmp.pop()
}
}
backTrack(list, [], nums)
return list
};
这边文章思路写的很清晰,留作参考:juejin.cn/post/705193…
力扣79-单词搜索
/**
* @param {character[][]} board
* @param {string} word
* @return {boolean}
*/
var exist = function(board, word) {
let row = board.length;
let col = board[0].length;
for (let i = 0; i < row; i++) {
for (let j = 0; j < col; j++) {
// 把board的坐标和word的当前索引传入
const result = find(i, j, 0)
if (result) {
return result;
}
}
}
return false;
function find(i, j, cur) {
// 边界条件
if (i>=row || i<0) {
return false
}
if (j>=col || j<0) {
return false
}
let letter = board[i][j]
// 不想等则不继续走这个路径了,终止
if (letter !== word[cur]) {
return false
}
// 成功条件
if (cur === word.length - 1) {
return true
}
// 防止回溯到上一个继续,case3
board[i][j] = null;
let res = find(i+1, j, cur+1) ||
find(i-1, j, cur+1) ||
find(i, j+1, cur+1) ||
find(i, j-1, cur+1)
board[i][j] = letter;
return res
}
};