70. 爬楼梯 若干数量的1和2组合成n,求组合方式的数量(不同顺序算作不同的组合方式)
若干数量的1和2组合成n,求组合方式的数量(不同顺序算作不同的组合方式)
斐波那契数列是什么
自己想到的回溯方法,不过在输入为41之后便超时
class Solution {
public:
void func(int target, int& ans){
if(target == 0){
ans += 1;
return;
}
if(target < 0){
return;
}
target -= 1;
func(target, ans);
target -= 1;
// target += 1;
// target -= 2;
func(target, ans);
// target += 2; //这里操作没意义
}
int climbStairs(int n) {
int ans = 0;
int target = n;
func(target, ans);
return ans;
}
};
动态规划方法:
class Solution {
public:
int climbStairs(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
int a = 1, b = 2, temp = 0;
for(int i = 3; i <= n; i++){
temp = b;
b += a;
a = temp;
}
return b;
}
};
75. 颜色分类
双指针法
class Solution {
public:
void sortColors(vector<int>& nums) {
int ptr_0 = 0;
int ptr_2 = nums.size() - 1;
for(int i = 0; i <= ptr_2; i++){
while(i >= ptr_0 && nums[i] == 0){
swap(nums[ptr_0], nums[i]);
ptr_0++;
}
while(i <= ptr_2 && nums[i] == 2){
swap(nums[ptr_2], nums[i]);
ptr_2--;
while(i >= ptr_0 && nums[i] == 0){
swap(nums[ptr_0], nums[i]);
ptr_0++;
}
}
}
}
};