地上有乙個m行n列的方格,從座標 [0,0] 到座標 [m-1,n-1] 。乙個機械人從座標 [0, 0] 的格仔開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 [35, 37] ,因為3+5+3+7=18。但它不能進入方格 [35, 38],因為3+5+3+8=19。請問該機械人能夠到達多少個格仔?
示例 1:
輸入:m = 2, n = 3, k = 1
輸出:3
示例 1:
輸入:m = 3, n = 1, k = 0
輸出:1
class
solution
public
void
mycount
(boolean
map,
int k,
int i,
int j,
int si,
int sj)
res ++
;/*這裡寫si-8的意思是,如果i是9,下乙個數10的sum為1,即9-8
如果i是19,下乙個數20的sum為2 即1+9-8,
如果i是29,下乙個數30的sum為3,即2+9-8;
*/if(i+
1< map.length &&
!map[i+1]
[j])
if(j+
1< map[0]
.length &&
!map[i]
[j +1]
)}}
/*此處可以不用getsum()方法,由於bfs寫的少,邏輯不夠清晰,所以用那個方法來減少引數的傳遞,避免混亂*/
class
solution);
map[0]
[0]=
true
;bfs
(m,n,k,que,map)
;return res;
}public
void
bfs(
int m,
int n,
int k,queue<
int[
]>que,
boolean
map));
}if(y +
1< n &&
getsum
(x,y+1)
<= k &&
!map[x]
[y+1])
);}}
}public
static
intgetsum
(int num1,
int num2)
sum += num1;
while
(num2 /
10!=0)
sum += num2;
return sum;
}}
劍指 Offer 13 機械人的運動範圍
題目描述 地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但...
劍指 Offer 13 機械人的運動範圍
地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入...
劍指 Offer 13 機械人的運動範圍
地上有乙個m行n列的方格,從座標 0,0 到座標 m 1,n 1 乙個機械人從座標 0,0 的格仔開始移動,它每次可以向左 右 上 下移動一格 不能移動到方格外 也不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入...