image.png

二维

  1. import java.util.*;
  2. public class Solution {
  3. public int uniquePaths (int m, int n) {
  4. // write code here
  5. int[][] dp = new int[m][n];
  6. for(int i = 0; i < m; i++){
  7. for(int j = 0; j < n; j++){
  8. if(i == 0 || j == 0){
  9. dp[i][j] = 1;
  10. continue;
  11. }
  12. dp[i][j] = dp[i-1][j]+dp[i][j-1];
  13. }
  14. }
  15. return dp[m-1][n-1];
  16. }
  17. }

优化为一维

因为每一位只需要用到当前位置上面和左边的值,所以使用一维数组,一层一层的计算,此时第index个位置的值为上一层的值,所以要算当前位置的路径数,只需要累加上左边的值即可。

  1. import java.util.*;
  2. public class Solution {
  3. public int uniquePaths (int m, int n) {
  4. int[] dp = new int[n];
  5. for(int i = 0; i < n; i++)
  6. dp[i] = 1;
  7. for(int i = 1; i < m; i++){
  8. for(int j = 1; j < n; j++){
  9. dp[j] = dp[j]+dp[j-1];
  10. }
  11. }
  12. return dp[n-1];
  13. }
  14. }