劍指offer13機械人的運動範圍

2021-10-03 22:35:54 字數 1455 閱讀 4195

地上有乙個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。但它不能進入...