想獲得更好的排版,請移步個人部落格:題目(原題見 leetcode - 62. 不同路徑):乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。問總共有多少條不同的路徑?
示例 1:
輸入: m = 3, n = 2
輸出: 3
解釋:從左上角開始,總共有 3 條路徑可以到達右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
通過觀察我們我們得出以下兩個特點:
機械人所在的正東方向和正南方向,只能有一條路徑可以走,即直走。
到某個點的路徑 = 到該點上乙個單位的點路徑 + 到該點左乙個單位的點路徑。
為了驗證第二個特點,我們假設網格是 2 * 2。如下圖所示,從 a 到達 d 點的路徑總和就等於 a 點到達 b 點的路徑 + 到達 c 點的路徑總和。
這樣,我們不難寫出遞迴**:
public int solution(int m, int n)
遞迴**雖然簡單,但是和斐波那契數列遞迴實現一樣,會出現重複子樹的情況。例如求 4 * 3 的路徑時,就出現了遞迴計算重複子樹的情況:
和斐波那契一樣,可以用動態規劃來優化複雜度,不難寫出狀態轉移方程為:f(i, j) = f(i - 1)(j) + f(i)(j - 1)
public int solution(int m, int n)
for (int i = 0; i < m; i++)
for (int i = 1; i < n; i++)
}return dp[n - 1][m - 1];
}
現在,保持和無障礙物的題意,在網格中設定了障礙物(機械人無法越過障礙物),求到終點的路徑總和。原題見 leetcode - 63. 不同路徑 ii
雖然增加了障礙物,但是前面總結的兩個特點還是適用的。但是,需要做一些改變:
leetcode 官方**如下:
// 第一列
for (int i = 1; i < n; i++)
}// 第一行
for (int j = 1; j < m; j++)
}for (int i = 1; i < n; i++) }}
return dp[n - 1][m - 1];
}
機械人軍團 動態規劃
機械人軍團 時間限制 1 sec 記憶體限制 64 mb 提交 279 解決 139 提交 狀態 命題人 admin 題目描述 邪狼 怎麼感覺這些機械人比我還聰明?不是說人工智慧永遠不能超越人類嗎?天頂星人 你們真是目光短淺,自大而愚蠢!你要知道,如果有意識的智慧型生命在無窮無盡的歲月裡居然做不到無...
動態規劃 機械人軍團
題目描述 邪狼 怎麼感覺這些機械人比我還聰明?不是說人工智慧永遠不能超越人類嗎?天頂星人 你們真是目光短淺,自大而愚蠢!你要知道,如果有意識的智慧型生命在無窮無盡的歲月裡居然做不到無意識的宇宙曾做過的事 產生智慧型生命 這就好像乙隻無知的猴子在琴鍵上跳了億萬年居然跳出了一支貝多芬第九交響曲,而有智慧...
機械人軌跡規劃
路徑和軌跡 運動率 執行器施加到關節的廣義力,不違反飽和度限制且不激發結構的典型諧振模式。路徑 在關節空間和操作空間中,機械手在執行指定運動時必須跟隨的點的軌跡。軌跡 一條指定了時間率的路徑。軌跡規劃演算法的輸入 路徑描述 路徑約束 機械手動力學約束 輸出 按時間順序給出的位置 速度 加速度序列 1...