问题描述:
求 1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
解题思路:
这题最简单和最快的方法应该是使用等差数列求和公式,即:return (1+n)*n/2;
但是题目要求不能使用乘除法,所以排除此方法。
不能使用乘除法而且还不能使用循环语句,首先想到的应该是递归。但是递归需要有递归出口,这需要使用if语句进行判断。
本题的关键就是怎么样能在递归的时候不使用if判断;其实使用&&
运算的短路性质也可以实现选择语句的功能。
代码实现:
public int sumNums(int n) {
boolean t = n>1 && (n += sumNums(n-1)) >0;
return n;
}
提交结果:
使用等差数列求和的提交结果如下,效率快很多。
扫描二维码关注公众号,回复:
12478365 查看本文章
