LeetCode62.不同路径
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(i==0) {
dp[i][j]=1;
continue;
}
if(j==0) {
dp[i][j]=1;
continue;
}
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
LeetCode63. 不同路径 II
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
if(obstacleGrid.length==0)return 0;
int m=obstacleGrid.length,n=obstacleGrid[0].length;
int[][] dp = new int[m][n];
for(int i=0;i<m;i++) {
for(int j=0;j<n;j++) {
if(obstacleGrid[i][j]==1) {
continue;
}
if(i==0&&j==0) {
dp[i][j]=1;
continue;
}
if(i==0) {
if(dp[i][j-1]!=0) {
dp[i][j]=1;
}
continue;
}
if(j==0) {
if(dp[i-1][j]!=0) {
dp[i][j]=1;
}
continue;
}
dp[i][j]=dp[i-1][j]+dp[i][j-1];
}
}
return dp[m-1][n-1];
}
LeetCode343.整数拆分
public int integerBreak(int n) {
int[] dp = new int[n+1];
dp[0]=0;
dp[1]=0;
dp[2]=1;
for(int i=3;i<=n;i++) {
for(int j=1;j<i;j++) {
//一种情况是拆,一种情况是不拆
int max=Math.max(j*dp[i-j], j*(i-j));
if(dp[i]<max) {
dp[i]=max;
}
}
}
return dp[n];
}
LeetCode96.不同的二叉搜索树
public int numTrees(int n) {
int[] dp = new int[n+1];
dp[0]=1;
for(int i=1;i<=n;i++) {
int sum=0;
for(int j=1;j<=i;j++) {
sum=sum+dp[j-1]*dp[i-j];
}
dp[i]=sum;
}
return dp[n];
}