一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記爲「Start」 )。java
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記爲「Finish」)。性能
問總共有多少條不一樣的路徑?code
例如,上圖是一個7 x 3 的網格。有多少可能的路徑?LeetCode原題blog
這是一個比較簡單的動態規劃問題,因爲沒有障礙 (不一樣路徑2 網格中有障礙),leetcode
因爲每一步都只能向右或者向下,那很明顯,能夠知道第一行和第一列的每個格子都是1:get
因爲只能向右和向下,能達到2號位置的路徑只有兩種,右→下 或者 下→右。同理,第一行第一列之外的其餘任何一個位置的路徑數,都等於當前位置前面和上面的路徑和。這樣就能夠獲得最終的路徑:io
dp[m-1][n-1] = dp[m-1][n-2] + dp[m-2][n-1]
public class UniquePaths_62{ public static void main(String[] args) { Solution4 solution = new Solution4(); int res = solution.uniquePaths(1,1); System.out.println(res); } } class Solution { public int uniquePaths(int m, int n) { //1.初始化第一行第一列 int[][] dp = new int[m][n]; for (int i = 0; i < dp.length; i++) { for (int j = 0; j < dp[0].length; j++) { dp[0][j] = 1; dp[i][0] = 1; } } for (int i = 1; i < dp.length; i++) { for (int j = 1; j < dp[0].length; j++) { dp[i][j] = dp[i][j-1] + dp[i-1][j]; } } return dp[m-1][n-1]; } }
性能:class
(1)時間複雜度:O(m*n)方法
(2)空間複雜度:O(m*n)im
因爲我的水平有限,博文中不免有錯誤或表達不許確之處,歡迎各位大佬批評指正。若有更好的方法,歡迎評論區留下你的高見,歡迎轉載轉發,記得註明出處。碼字不易,若有幫助,歡迎打賞一杯熬夜咖啡,謝謝老闆~~~