剑指offer之求1+2+...+n
题目描述:
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
这道题很容易想到的解题思路是递归的解法,即每次函数每次返回当前值n与递归下一步的和(n+sumNums(n-1))。你可能会写出下面的代码:
class Solution {public:int sumNums(int n) {return n+sumNums(n-1);}
};
很明显上面的代码是没有递归终止条件的,也就是说这段代码会一直执行下去。因此我们需要添加一个终止条件,也就是当n==0时,递归结束。进而你可能会想到下面的代码:
class Solution {public:int sumNums(int n) {return n == 0 ? 0 : n + sumNums(n-1);}
};
再检查一遍题目描述,这道题是不允许使用条件判断语句的,因此上面的代码也不可行。为此,我们还需要再想一下其他的判断方法。我们知道C++中如果a&&b中a为0,那么程序将不再判断b是否为1,进而可以想到将函数的终止条件放到a中,将执行条件放到b中,从而得到下面的代码:
class Solution {public:int sumNums(int n) {n && (n += sumNums(n-1));//当n!=0时函数继续递归执行,当n==0时,函数返回0,结束递归。return n;}
};
剑指offer之求1+2+...+n相关推荐
- 剑指offer之求两个数之和(不能使用四则运算)
1 题目 剑指offer之求两个数之和(不能使用四则运算) 2 代码实现 #include<stdio.h>int add(int num1, int num2) {int sum1;in ...
- LeetCode 剑指Offer 64.求1,2到n的和, 不使用循环/判断及乘除
题目 剑指 Offer 64. 求1+2+-+n 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: ...
- 【LeetCode】剑指 Offer 64. 求1+2+…+n
[LeetCode]剑指 Offer 64. 求1+2+-+n 文章目录 [LeetCode]剑指 Offer 64. 求1+2+-+n package offer;public class Solu ...
- 剑指offer:求1+2+3+...+n
题目描述 求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解题思路 短路计算调用递归. class Solu ...
- 《剑指offer》求1+2+3+...n(不用if、else、乘除等)
题目:求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解析:题目提示已经很明显了,需要大家用A?B:C法解题 ...
- 《剑指offer》求二叉树的最小深度(非递归法)
题目:求二叉树的最小深度(实际上该题来自leetcode) 解析:递归法简单些,下面演示下非递归.无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保 ...
- 剑指offer之求二叉树中两个节点的最低共同父节点
1 问题 求二叉树中俩个节点的最低共同父节点,比如二叉树如下 42 61 3 5 7 比如节点1和3两个节点的最低共同父节点是2,节点3和5两个节点的最低共同父节点是4,节点5和6两个节点的最低共同父 ...
- 剑指offer之求两个链表的第一个公共节点
1 问题 输入两个链表,找出它们的第一个公共结点. 含有公共节点的两个链表的结构类似于下图中的链表: 1 -> 2 -> 3 -> 4 ->5 2 -> 4 ->5 ...
- 剑指Offer 64 求1+2+...+n
求1+2+...+n 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 1 # -*- coding:ut ...
最新文章
- MAT之SVM/BP:SVR(better)和BP两种方法比较且实现建筑物钢筋混凝土抗压强度预测
- java泛型学习三:受限制的通配符以及泛型方法
- 刘志勇:微博短视频百万级高并发架构
- 分享21款漂亮的WordPress高级主题
- WIN7 64位系统安装JDK并配置环境变量
- Spring MVC @RequestMapping Annotation示例
- linux 好用的命令行软件,比较好用的linux命令
- css基础 -文本溢出 text-overflow:ellipsis;
- 二十六、K8s系统强化2-seccomp与sysdig
- C# IEnumerator与 IEnumerable(2) 托管使用
- 分治法--二分查找、乘方、斐波那契数
- cglib动态代理实现及其原理浅析
- 手机业务的趋势:移动互联
- 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...
- MATLAB双目标定步骤
- spark推测机制及参数设置
- ar ebs 销售订单关闭_本周大新闻|《哈利波特》AR游戏玩法公开,谷歌关闭VR影视部门...
- win10輸入法去掉语言栏?win10輸入法切换简体繁体?
- 微信小程序和微信H5有什么区别?
- 国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点
热门文章
- android eclipse services,Eclipse中调试Android Framework本地代码模块部分过程记录
- centos7限制cpu使用_CentOS7 CPU隔离配置
- nodejs readfilesync 路径_Linux 磁盘多路径聚合multipath
- c语言solaris中图形库,成功弄出simics下的CDE登录界面,与大家分享
- matlab项目实例教程,matlab简明实例教程.doc
- java高级mysql面试题_Java高级面试题
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
- ubuntu13.10无法登陆
- ud分区删除工具_硬盘分区GPT分区怎么转MBR呢?硬盘分区GPT分区转MBR教程
- 链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表