家居整理师将待整理衣橱划分为
m x n
的二维矩阵grid
,其中grid[i][j]
代表一个需要整理的格子。整理师自grid[0][0]
开始 逐行逐列 地整理每个格子。整理规则为:在整理过程中,可以选择 向右移动一格 或 向下移动一格,但不能移动到衣柜之外。同时,不需要整理
digit(i) + digit(j) > cnt
的格子,其中digit(x)
表示数字x
的各数位之和。请返回整理师 总共需要整理多少个格子。
示例 1:
输入:m = 4, n = 7, cnt = 5 输出:18提示:
1 <= n, m <= 100
0 <= cnt <= 20
/**
* @param {number} m
* @param {number} n
* @param {number} k
* @return {number}
*/
var movingCount = function(m, n, k) {
function getNum(num){
let answer = 0;
while(num){
answer += num % 10;
num = Math.floor(num / 10);
}
return answer;
}
const directionArray = [
[-1,0],
[0,1],
[1,0],
[0,-1]
];
let set = new Set(["0,0"]);
let queue = [[0,0]];
while(queue.length){
let [x,y] = queue.shift();
for(let i = 0;i < 4;i++){
let offsetX = x + directionArray[i][0];
let offsetY = y + directionArray[i][1];
if(offsetX < 0 || offsetX >= m ||offsetY < 0 || offsetY >= n ||
getNum(offsetY) + getNum(offsetX) > k||set.has(`${offsetX},${offsetY}`)){
continue;
}
set.add(`${offsetX},${offsetY}`);
queue.push([offsetX,offsetY]);
}
};
return set.size;
}