演算法 劍指 Offer 13 機械人的運動範圍

2021-10-09 19:37:09 字數 1397 閱讀 4926

原題鏈結

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

示例 2:

輸入:m = 3, n = 1, k = 0

輸出:1

主要思路:

終止條件判斷

判斷當前位置是否符合 數字和<= k 的條件,若符合,執行如下流程:

1.設定該位置已被訪問 visited=true

2.可達點數量 res++

3.向下向右搜尋

**:

class

solution

public

void

dfs(

int k,

int i,

int j,

boolean

visited)

}}

複雜度分析:

主要思路:

將(0,0) 節點加入佇列

當佇列不空時 ,執行如下操作:

1.取出隊頭元素

2.判斷隊頭元素是否被訪問,或越界,或數字和》k ,若是 continue

3.vis=true,res++

4.將右和下兩個節點加入佇列

**:

class

solution);

int res =0;

boolean

visited =

newboolean

[m][n]

;while

(!queue.

isempty()

)); queue.

add(

newint

);}return res;

}}

複雜度分析:

面試題13. 機械人的運動範圍( dfs / bfs ,清晰**)

劍指offer13機械人的運動範圍

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