013機械人的運動範圍

2021-10-14 07:54:22 字數 1157 閱讀 1092

地上有乙個 m行和 n列的方格,橫縱座標範圍分別是 0∼m−1 和 0∼n−1。 乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格。 但是不能進入行座標和列座標的數字之和大於 k 的格仔。

請問該機械人能夠達到多少個格仔?

輸入:k=7, m=4, n=5

輸出:20

輸入:k=18, m=40, n=40

輸出:1484

當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7 = 18。 但是,它不能進入方格(35,38),因為3+5+3+8 = 19。

0<=m<=50

0<=n<=50

0<=k<=100

方法一:

深度優先的方法,深度優先用遞迴。

當前座標(i,j)看成狀態。

遞迴搜尋(i-1,j),(i+1,j),(i,j-1),(i,j+1)不過這裡其實可以優化,只用考慮向下和向右即可。

遞迴出口:越界;位數和大於k;已經被訪問過。

時間空間複雜度都為o(mn)

class

solution

public

intdfs

(boolean

visited,

int m,

int n,

int k,

int i,

int j)

public

intsum

(int a)

return sum;

}}

方法二:廣度優先遍歷

廣度優先遍歷用佇列。將訪問過的單元格入隊,當隊列為空代表以遍歷完所有的可達解。

出口同樣是那三個狀態。

時間空間複雜度都為o(mn)

class

solution);

while

(!queue.

isempty()

)); queue.

add(

newint

);}return count;

}public

intsum

(int a)

return sum;

}}

機械人運動範圍

題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...

機械人運動範圍

地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 19。請...

劍指offer 013 機械人運動的範圍

劍指offer 目錄索引 問題描述 地上有乙個m行n列的方格。乙個機械人從座標 0,0 的格仔開始移動,它每一次可以向左 右 上 下移動一格,但不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但它不能進入方格 35,38 因...