递归
输入一个整数 n ,求斐波那契数列的第 n 项。
斐波那契数列
假定从 0 开始,第 0 项为 0。
数据范围
0≤n≤39
样例
输入整数 n=5
返回 5
题目分析:简单介绍一下这题面试中常考的题目斐波那契数列,首先简单介绍一下斐波那契数列是什么:
a0=0,a1=1,an=an−1+an−2,求an是多少
我们可以看到这题的数据范围非常小,可以直接用复杂度为O(n)的递推来做
具体解法:先定义两个变量a,b,分别表示第n−1项和第n项。且定义c=a+b来表示第 n+1项,然后让a,b滚动地顺次往后移一位(滚动数组解法)
class Solution {
public:
int Fibonacci(int n) {
int a=0,b=1;
while(n--)
{
int c=a+b;
a=b,b=c;
}
return a;
}
};
替换空格
请实现一个函数,把字符串中的每个空格替换成"%20"。
数据范围
0≤ 输入字符串的长度 ≤1000。
注意输出字符串的长度可能大于 1000。
样例
输入:“We are happy.”
输出:“We%20are%20happy.”
题目分析:
这题用C++做会很方便,我们可以从前往后枚举原字符串;
如果遇到空格,则在string类型的答案中添加"%20";
如果遇到其他字符,则直接将它添加在答案中;
class Solution {
public:
string replaceSpaces(string &str) {
string res;
for(auto x:str)
if (x==' ')
res+="%20";
else
res+=x;
return res;
}
};
求1+2+…+n
求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 (A?B:C)。
数据范围
1≤n≤1000。
样例
输入:10
输出:55
题目分析:
(递归) 时间复杂度O(n)
这题最直接的想法就是用递归,sum(n)=n+sum(n-1),
但是要注意终止条件,由于求的是1+2+…+n的和,
所以需要在n=0的时候跳出递归,但是题目要求不能使用if,while等分支判断,
所以可以考虑利用&&短路特性运算来终止判断。
class Solution {
public:
int getSum(int n)
{
int res=n;
n>0&&(res+=getSum(n-1));
return res;
}
};
- 点赞
- 收藏
- 关注作者
评论(0)