class Solution {
public int climbStairs(int n) {
int[] dp = new int[n + 1];
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}
方法1:循环嵌套
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> abs =new ArrayList<List<Integer>>();
//创建动态数组“外数组”;
for(int i=0;i<numRows;i++)
{
List<Integer> bs=new ArrayList<Integer>();//“内数组”一定要放外循环里面,可以初始化;
for(int j=0;j<=i;j++)
{
if(j==0||j==i)//判断是否为第一个和最后一个
{
bs.add(1);
}
else//如果不是就区前面的数组值来相加;
{
bs.add(abs.get(i-1).get(j-1)+abs.get(i-1).get(j));
} //abs.get()是取数组值的方法;
}
abs.add(bs);//将处理好的内数组放入外数组的员孙中;
}
return abs;//返回最后的答案;
}
}
方法2:动态规划
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result=new ArrayList<List<Integer>>();
int[][] dp=new int[numRows][numRows];
dp[0][0]=1;
for (int i = 1; i < numRows; i++) {
for (int j = 0; j <=i; j++) {
if(j==0)dp[i][j]=1;
else dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
}
}
for (int i = 0; i < dp.length; i++) {
List<Integer> tmp=new ArrayList<>();
for (int j = 0; j < dp.length; j++) {
if(dp[i][j]==0) break;
tmp.add(dp[i][j]);
}
result.add(new ArrayList<>(tmp));
}
return result;
}
}