1. 程式人生 > 其它 >62. 不同路徑(動態規劃)

62. 不同路徑(動態規劃)

技術標籤:LeeCode程式碼動態規劃java

package com.heu.wsq.leetcode.dp;

/**
 * 62. 不同路徑
 * @author wsq
 * @date 2020/12/9
 * 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
 * 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
 * 問總共有多少條不同的路徑?
 *
 *  示例 1:
 * 輸入: m = 3, n = 2
 * 輸出: 3
 * 解釋:
 * 從左上角開始,總共有 3 條路徑可以到達右下角。
 * 1. 向右 -> 向右 -> 向下
 * 2. 向右 -> 向下 -> 向右
 * 3. 向下 -> 向右 -> 向右
 *
 *  示例 2:
 * 輸入: m = 7, n = 3
 * 輸出: 28
 *  
 *
 * 連結:https://leetcode-cn.com/problems/unique-paths
 *
 */
public class UniquePaths { /** * 動態規劃思想,由於機器人只能向下或者向右行走,因此f[i][j] = f[i-1][j] + f[i][j-1] * * @param m * @param n * @return */ public int uniquePaths(int m, int n){ int[][] f = new int[m][n]; // 初始化狀態 for (int i = 0; i < m; i++) { f[
i][0] = 1; } for (int i = 0; i < n; i++) { f[0][i] = 1; } // 更新後續的狀態 for(int i = 1; i < m; i++){ for(int j = 1; j < n; j++){ f[i][j] = f[i-1][j] + f[i][j-1]; } } return f[m-1][n-1]; }
public static void main(String[] args) { int m = 3, n = 2; UniquePaths up = new UniquePaths(); int ans = up.uniquePaths(m, n); System.out.println(ans); } }