public static int uniquePaths(int m, int n) { if (m <= 0 || n <= 0) { return 0; } int[][] dp = new int[m][n]; // // 初始化 for(int i = 0; i < m; i++){ dp[i][0] = 1; } for(int i = 0; i < n; i++){ dp[0][i] = 1; } // 推导出 dp[m-1][n-1] for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } return dp[m-1][n-1]; }
时间: 2023-05-19 10:05:27 浏览: 138
这是一个动态规划问题,用二维数组 dp 存储每个位置的路径数,初始化第一行和第一列为 1,然后从第二行第二列开始,每个位置的路径数等于其上方和左方位置的路径数之和。最终返回 dp[m-1][n-1] 即可。
相关问题
public static int gcd(int m, int n) 还可以怎么写
`public static int gcd(int m, int n)` 这个方法还可以使用递归来实现。递归方法的基本思路是:如果 m 小于 n,就交换 m 和 n 的值;然后,如果 n 等于 0,就返回 m,否则递归调用 `gcd(n, m % n)`。
下面是使用递归方式实现的代码:
```
public static int gcd(int m, int n) {
if (m < n) {
int temp = m;
m = n;
n = temp;
}
if (n == 0) {
return m;
} else {
return gcd(n, m % n);
}
}
```
递归实现的方式与循环实现的方式相比,代码看起来更加简洁,但是在计算过程中会生成多个调用栈,可能会导致栈溢出的问题。因此,在实际应用中需要注意函数的递归深度。
public static int fei(int p){ int x; if(p==0){ return x=1; } else return x=0; }
这段代码似乎是要实现斐波那契数列,但是它的实现是错误的。首先,这个方法的返回值类型是int,但是它却返回了一个未初始化的变量x,这是不合法的。其次,这个方法只有一个参数p,但是在斐波那契数列中需要知道前两个数才能计算后面的数,因此这个方法的参数不足以完成斐波那契数列的计算。最后,这个方法的实现也是错误的,它只是简单地返回了0或1,而没有进行任何斐波那契数列的计算。如果你想实现斐波那契数列的话,可以参考下面的代码:
```
public static int fib(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fib(n-1) + fib(n-2);
}
}
```
这个方法接受一个整数n作为参数,返回斐波那契数列中第n个数的值。它通过递归的方式来计算斐波那契数列,当n为0或1时直接返回0或1,否则返回前两个数的和。