70. 爬楼梯 (进阶)
要求:可以一下爬1-2个台阶,问爬到N阶的时候有多少种方法
公式1: nums[n] = nums[n-1]+nums[n-2];
公式2: dp[n] +=dp[n-nums[i]];
代码:
1 // 爬楼梯的问题:依次只能爬1 2,满足N时,它的排列有多少种 2 // dp[n]:当爬够N阶台阶的时候一共有多少种方法 3 // 4 // dp[j] += dp[j-nums[i]] 5 // 6 7 int climbStairs(int n) { 8 if (n == 0) return 0; 9 vector<int> nums = { 1,2 }; 10 vector<int> dp(n + 1, 0); 11 dp[0] = 1; 12 13 for (int j = 0; j <= n; j++) 14 { 15 for (int i = 0; i < nums.size(); i++) 16 { 17 if(j>=nums[i]) 18 dp[j] += dp[j - nums[i]]; 19 } 20 } 21 22 return dp[n]; 23 }