# Leetcode 解題速記 62. Unique Paths ###### tags: `LeetCode` `C++` 題敘: --- There is a robot on an m x n grid. The robot is initially located at the top-left corner (i.e., grid[0][0]). The robot tries to move to the bottom-right corner (i.e., grid[m - 1][n - 1]). The robot can only move either down or right at any point in time. Given the two integers m and n, return the number of possible unique paths that the robot can take to reach the bottom-right corner. The test cases are generated so that the answer will be less than or equal to 2 * 109. ![](https://i.imgur.com/wdFwyxC.png) Example 1: >Input: m = 3, n = 7 >Output: 28 Example 2: >Input: m = 3, n = 2 Output: 3 Explanation: From the top-left corner, there are a total of 3 ways to reach the bottom-right corner: >1. Right -> Down -> Down >2. Down -> Down -> Right >3. Down -> Right -> Down 測資範圍: --- * 1 <= m, n <= 100 解題筆記: --- 經典DP題之一,觀察題目可以發現,走到任何一格的方法取決於**走到該格左方**與**走到該格上方**的方法數量,因為機器人只能向右或是向下走,因此不會有走到重覆格子的問題。透過這樣的觀察可以很快得出狀態轉換方程式 : `dp[i][j] = dp[i - 1][j] + dp[i][j - 1]` 之後只要設定基底狀態,也就是`i,j`皆為0 (最上面與最右邊那排) 都為1,即可解題 程式碼: --- ``` class Solution { public: int uniquePaths(int m, int n) { int dp[101][101] = {0}; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (i == 0 || j == 0) { dp[i][j] = 1; } else { dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; } } } return dp[m - 1][n - 1]; } }; ```