Skip to content

Commit 500998c

Browse files
committed
剑指 Offer 13. 机器人的运动范围
1 parent 2fa044b commit 500998c

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。
3+
一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格,
4+
也不能进入行坐标和列坐标的数位之和大于k的格子。
5+
6+
例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。
7+
但它不能进入方格 [35, 38],因为3+5+3+8=19。
8+
请问该机器人能够到达多少个格子?
9+
**/
10+
11+
/**
12+
* @param {number} m
13+
* @param {number} n
14+
* @param {number} k
15+
* @return {number}
16+
*/
17+
var movingCount = function (m, n, k) {
18+
let total = 0
19+
let obj = {}
20+
function runing(i, j) {
21+
//边界直接返回
22+
if (i < 0 || j < 0 || i >= m || j >= n) return
23+
let sum = (i + '' + j).split('').reduce((a, b) => +a + +b)
24+
let pos = JSON.stringify([i, j])
25+
if (!obj[pos] && sum <= k) {
26+
// 当该点还没走过 且 不大于k 时 继续执行
27+
total++
28+
obj[pos] = true // 标识该点已经走过, 下次不进
29+
// 当前的继续 上下左右 走
30+
runing(i + 1, j)
31+
runing(i, j + 1)
32+
runing(i - 1, j)
33+
runing(i, j - 1)
34+
}
35+
}
36+
runing(0, 0)
37+
return total
38+
}

0 commit comments

Comments
 (0)