# golang_unique_paths

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 * \$10^9\$`.

## Examples

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

``````

Constraints:

• `1 <= m, n <= 100`

## 解析

dp[i, j] = dp[i-1, j] + dp[i, j-1]

## 程式碼

```package sol

func uniquePaths(m int, n int) int {
dp := make([][]int, m)
for row := range dp {
dp[row] = make([]int, n)
}
for col := 0; col < n; col++ {
dp[0][col] = 1
}
for row := 0; row < m; row++ {
dp[row][0] = 1
}
for row := 1; row < m; row++ {
for col := 1; col < n; col++ {
dp[row][col] = dp[row-1][col] + dp[row][col-1]
}
}
return dp[m-1][n-1]
}```

## 困難點

1. 要看出每個位置走法數目的遞迴關係

## Solve Point

• 建立一個 m by n 矩陣 用來紀錄已經算過的結果, 初始化 row = 0 或 col = 0 的 cell 值 = 1
• 透過 dp[i][j] = dp[i-1][j] + dp[i][j-1] 來從推算每個值
• 回傳 dp[m-1][n-1]

View Github