如何解决算法问题:唯一路径III在javascript中使用回溯模式无法正常工作
在二维网格上,有4种正方形:
1代表开始的平方。恰好有一个起始方块。
2表示结束方块。恰好有一个结尾正方形。
0代表我们可以走过去的空方格。
-1表示我们无法越过的障碍。
将从开始方块到结束方块的4向步行次数返回,该步行精确遍历每个非障碍方块一次。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/unique-paths-iii
我正在尝试使用回溯模式来解决此问题
这是我的代码
/**
* @param {number[][]} grid
* @return {number}
*/
var uniquePathsIII = function(grid) {
let m = grid.length,n = grid[0].length;
let start,targetIndex1,targetIndex2;
let res = 0;
let zero_counts = 0;
for(let i = 0; i < m; i++){
for(let j = 0; j < n; j++){
if(grid[i][j] == 1){
start = [i,j]
}
else if(grid[i][j] == 0){
zero_counts += 1;
}
else if(grid[i][j] == 2){
targetIndex1 = i;
targetIndex2 = j;
}
}
}
const backtrace = (i,j,zero_count) => {
if( i < 0 || i >= m ||
j < 0 || j >= n ||
grid[i][j] == -1 || zero_count < 0)
{
return;
}
if(i == targetIndex1 && j == targetIndex2 ){
if(zero_count == 0)
{
console.log("yes")
res += 1;
}
return
}
grid[i][j] = -1;
backtrace(i+1,zero_count - 1)
backtrace(i-1,zero_count - 1)
backtrace(i,j+1,j-1,zero_count - 1)
grid[i][j] = 0;
}
backtrace(start[0],start[1],zero_counts);
return res;
};
测试样本:
[[1,0],[0,2,-1]]
预期结果: 2
最终结果: 0
解决方法
也许更简单的解决方案是使用Depth First Search to solve Unique Paths III,如下所示。
概念是先抓住一个点,然后再四处走动,直到碰到障碍物为止。
胆量如下:
int totalPaths = dfs(grid,x+1,y,zero) +
dfs(grid,x,y+1,x-1,y-1,zero);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。