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

简介: 剑指Offer64.求1+2+...+n


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


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

题目描述:

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

注意题目约束条件哦!!


示例1:


1. 输入:3
2. 输出:6


示例2:


1. 输入:9
2. 输出: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)


总结


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

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


相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
57 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
51 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 49. 丑数
解决剑指 Offer 49题"丑数"的Python实现,通过动态规划的方法计算出第n个丑数。
41 2
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
36 1
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
39 1
|
3月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
231 1
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
28 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
54 5
|
3月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
23 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
39 3