和【79.单词搜索】的思路很像,但是略有不同
/**
* @param {number} m
* @param {number} n
* @param {number} k
* @return {number}
*/
var movingCount = function(m, n, k0) {
//初始化一个记录是否走过的空数组
let form = new Array(m);
for(let i=0; i<form.length; i++){
form[i] = new Array(n);
for(let j=0; j<form[i].length; j++){
form[i][j] = 0;
}
}
const move = function f(i,j,k){
//判断i和j是否越界,此路不通
if(i<0 || i>m-1 || j<0 || j>n-1) return 0;
//判断是否走过,此路不通
if(form[i][j]===1) return 0;
//对i和j进行字符串转换的处理和计算
let iString = i.toString();
let jString = j.toString();
let sum = 0;
for (var a = 0;a<iString.length;a++){
sum = sum + Number(iString[a]);
}
for (var a = 0;a<jString.length;a++){
sum = sum + Number(jString[a]);
}
//位数和大于k,此路不通
if (sum>k) return 0;
//该格标记为走过,且不再归0,和剑指04题略有不同。
form[i][j] = 1;
//因为本格可达,所以要加1
return 1 + move(i,j+1,k) + move(i+1,j,k) + move(i,j-1,k) + move(i-1,j,k);
}
return move(0,0,k0);
};