【手把手带你刷LeetCode】——03.剑指Offer64.求1+2+...+n

【前言】:HelloHello,大家好咩,我又来了哦。今天是力扣打卡第三天!大家看到这个标题是不是打心底认为太简单了,其实不然哦,难倒是不难,不过有很多限制哦,不信你朝后看。

原题:剑指Offer64.求1+2+...+n

题目描述:

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

注意题目约束条件哦!!

示例1:

输入:3
输出:6

示例2:

输入:9
输出:45

在之前蓝桥杯算法竞赛系列——深入理解重难点之递归中讲解过这道题的递归解法,忘了的童鞋可以再回顾一下哦。

https://blog.csdn.net/weixin_57544072/article/details/120836167

由于众多条件限制,就我们熟悉的解法中,还是只能选择递归了,但是终止条件不能用if语句,这又是一件麻烦的事,怎么办呢?请朝后看...

 

对,没错,逻辑操作符 &&和|| 具有一个重要的特性——短路求值

  • 对于&& ,如果左侧表达式的值为false, 则表达式整体的值一定是false,此时无需计算右侧;
  • 对于|| ,如果左侧表达式的值为true,则表达是整体的值一定是true,此时无需计算右侧

本题需要实现 “当 n ==1 时终止递归” 的需求,可通过短路效应实现

n > 1 && sumNums(n - 1) // 当 n = 1 时 n > 1 不成立 ,此时 “短路” ,终止后续递归

代码执行:

方法一:

int sumNums(int n){
    
    n > 1 && (n += sumNums(n - 1));
    return n;
}

 方法二:

int sumNums(int n){
    
    n == 1 || (n += sumNums(n - 1));
    return n;
}

 

 复杂度分析

  • 时间复杂度:O(N)  递归函数调用了 n 次,每次调用建立一个栈帧,每个栈帧使用了常数个空间O(1)     注意:调用时建立栈帧,返回时销毁。
  • 空间复杂度:O(N)  递归函数的空间复杂度取决于递归调用栈的深度,这里递归函数调用栈深度为 O(N)

总结​​​​​​​

今天是力扣打卡第三天!冲冲冲,再忙也要刷题呀!!

感谢力扣里面的大佬给予的帮助,向大佬看齐!

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安然无虞

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值