每天一道leetcode:剑指 Offer 64. 求1+2+…+n(中等&递归)

今日份题目:

1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

示例1

复制代码
输入: n = 3
输出: 6

示例2

复制代码
输入: n = 9
输出: 45

提示

  • 1 <= n <= 10000

题目思路

使用递归,我们马上的想法是:

cpp 复制代码
class Solution 
{
public:
    int sumNums(int n) 
    {
        if(n==0) return 0;
        else return n+sumNums(n-1);
    }
};

或者:

cpp 复制代码
class Solution 
{
public:
    int sumNums(int n) 
    {
        return n==0?0:n+sumNums(n-1);
    }
};

但是题目要求不能出现if、A?B:C这样的关键字,所以,我们只能直接返回什么东西。返回什么?返回n。只不过n要进行自加,这样返回的就是n+sumNums(n-1),除此之外,还要有递归结束条件,也就是n==0时结束递归,所以需要先判断n是否为0,使用&&的短路原则,也就是A&&B当A为0/false时不进行B运算直接结果为0/false,这样就不会再执行sumNums(n-1)等递归部分了,实现了递归的结束。

补充:短路原则

A&&B:可以把&&看作乘法,当A为0时,0乘以任何数都为0,故不计算B,直接返回0。

A||B:可以把||看作加法,当A为1时,任意非负数加1一定不为0,故不计算A,直接返回1。

代码

cpp 复制代码
class Solution 
{
public:
    int sumNums(int n) 
    {
        n&&(n+=sumNums(n-1));
        return n;
    }
};

提交结果

欢迎大家在评论区讨论,如有不懂的部分,欢迎在评论区留言!

更新不易,宝子们点个赞支持下,谢谢!

每天一道leetcode,大家一起在评论区打卡呀!

相关推荐
Lululaurel17 分钟前
机器学习系统框架:核心分类、算法与应用全景解析
人工智能·算法·机器学习·ai·分类
愚润求学21 分钟前
【贪心算法】day8
c++·算法·leetcode·贪心算法
平生不喜凡桃李24 分钟前
C++ 异常
android·java·c++
小伟童鞋34 分钟前
c++中导出函数调用约定为__stdcall类型函数并指定导出函数名称
开发语言·c++
维C泡泡34 分钟前
C++初认、命名规则、输入输出、函数重载、引用+coust引用
开发语言·c++
递归尽头是星辰40 分钟前
双指针与滑动窗口算法精讲:从原理到高频面试题实战
算法·双指针·滑动窗口·子串/子数组问题
青草地溪水旁1 小时前
设计模式(C++)详解——建造者模式(2)
c++·设计模式·建造者模式
_OP_CHEN1 小时前
数据结构(C语言篇):(十三)堆的应用
c语言·数据结构·二叉树·学习笔记·堆排序··top-k问题
郝学胜-神的一滴1 小时前
深入探索 C++ 元组:从基础到高级应用
开发语言·c++·stl·软件工程
听情歌落俗2 小时前
MATLAB3-1变量-台大郭彦甫
开发语言·笔记·算法·matlab·矩阵