递归

举报
秋名山码民 发表于 2022/08/31 15:46:49 2022/08/31
【摘要】 输入一个整数 n ,求斐波那契数列的第 n 项。 斐波那契数列假定从 0 开始,第 0 项为 0。数据范围0≤n≤39样例输入整数 n=5返回 5题目分析:简单介绍一下这题面试中常考的题目斐波那契数列,首先简单介绍一下斐波那契数列是什么:a0=0,a1=1,an=an−1+an−2,求an是多少我们可以看到这题的数据范围非常小,可以直接用复杂度为O(n)的递推来做具体解法:先定义两个变量a,...

输入一个整数 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;
    }
};

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。