【每日一题】74. 搜索二维矩阵 + 【剑指offer】10- I. 斐波那契数列
每日一题
搜索二维矩阵,前几天做过,这次独立写出来了。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int i = 0,j = size(matrix[0]) - 1;
int flag = matrix[i][j];
//printf("%d",size(matrix));
while(i < size(matrix) && j >= 0){
flag = matrix[i][j];
if(flag < target){
i++;
}
else if(flag > target){
j--;
}
else{
return true;
}
}
return false;
}
};
剑指10-1
递归
斐波那契数列典型用递归来处理。但是这样会超出时间限制。
class Solution {
public:
int fib(int n) {
if(n == 0){
return 0;
}
else if(n == 1){
return 1;
}
else{
return fib(n - 1) + fib(n - 2);
}
}
};
动态规划
存下来前面的所有的数。
class Solution {
public:
int fib(int n) {
vector<int> dp;
for(int i = 0;i <= n;i++){
if(i == 0){
dp.push_back(0);
}
else if(i == 1){
dp.push_back(1);
}
else{
dp.push_back((dp[i-1]+dp[i-2])%(1000000007));
}
}
return dp[n];
}
};
因为结果只跟前两个数字有关,所以要想办法存储前两个数字。
class Solution {
public:
int fib(int n) {
if(n == 0){
return 0;
}
else if(n == 1){
return 1;
}
int first = 0;
int second = 1;
int res;
for(int i = 2;i <= n;i++){
res = first + second;
first = second;
second = res % 1000000007;
}
return second;
}
};