|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
- The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
- How many possible unique paths are there?
- Above is a 7 x 3 grid. How many possible unique paths are there?
- Note: m and n will be at most 100.
- Example 1:
- 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 -> Right -> Down
- 2. Right -> Down -> Right
- 3. Down -> Right -> Right
- Example 2:
- Input: m = 7, n = 3
- Output: 28
复制代码
DP:二维数组
- class Solution {
- public int uniquePaths(int m, int n) {
-
- int[][] memo = new int[n+1][m+1];
-
- for(int i = 1; i<= n; i++){
- for(int j = 1; j<= m; j++){
- memo[i][j] = 1;
- }
- }
-
- for(int i = 2; i<= n; i++){
- for(int j = 2; j<= m; j++){
- if(i == 1 && j == 1) memo[i][j] = 1;
-
- if((i == 1 && j != 1)) memo[i][j] = memo[i][j-1];
- else if( (j == 1 && i!= 1)) memo[i][j] = memo[i-1][j];
- else memo[i][j] = memo[i][j-1] + memo[i-1][j];
- }
- }
-
- return memo[n][m];
-
- }
- }
复制代码
DP: 优化为一维数组
- class Solution {
- public int uniquePaths(int m, int n) {
-
- int[] memo = new int[m+1];
- int former = 0;
-
- for(int j = 0; j<= m; j++){
- memo[j] = 1;
- }
-
-
- for(int i = 1; i<= n; i++){
- for(int j = 1; j<= m; j++){
-
- if((i == 1 && j != 1)) memo[j] = memo[j-1];
- else if( (j == 1 && i!= 1)) former = 1;
- else {
- memo[j] = memo[j] + former;
- former = memo[j];
- }
- }
- }
-
- return memo[m];
-
- }
- }
复制代码 |
|