Leetcode62:不同路径Ⅰ
题目描述
思路分析
解法一:动态规划
public int uniquePaths1(int m,int n) {
int[][]res=new int[m][n];
for (int i = 0; i < m; i++)
{
res[i][0]=1;
}
for (int i = 0; i < n; i++)
{
res[0][i]=1;
}
for (int i = 1; i < m; i++)
{
for (int j = 1; j < n; j++)
{
res[i][j]=res[i-1][j]+res[i][j-1];
}
}
return res[m-1][n-1];
}
解法二:将空间复杂度降为一维
public int uniquePaths2(int m,int n) {
int[]res=new int[n];
res[0]=1;
for (int i = 0; i < m; i++)
{
for (int j = 1; j < n; j++)
{
res[j]=res[j]+res[j-1];
}
}
return res[n-1];
}
解法三:公式法
public int uniquePaths3(int m,int n) {
int count=m+n-2;
int k=m-1;
double res=1;
for (int i = 1; i <=k; i++)
{
res=res*(count-k+1)/i;
}
return (int)res;
}
Leetcode63:不同路径Ⅱ
题目描述
代码实现
public int uniquePaths2_2(int[][] obstacleGrid) {
int length=obstacleGrid[0].length;
int[]res=new int[length];
res[0]=1;
for (int i = 0; i < obstacleGrid.length; i++)
{
for (int j = 0; j < obstacleGrid[0].length; j++)
{
if (obstacleGrid[i][j]==1)
{
res[j]=0;
}else if (j>0) {
res[j]+=res[j-1];
}
}
}
return res[length-1];
}