地上有乙個 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 因...