【Java】力扣 - 刷题笔记 - 剑指 Offer 64
【Java】力扣 - 刷题笔记 - 剑指 Offer 64
每日一道题,提升一点点
题目介绍
剑指 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
解题思路
- 1.题目分析
首先题目中说明了:
不能使用:乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
那么假如说没有上面这个要求,我们该如何实现?
用一个最简单的 for 循环就可以搞定了
public int sumNums(int n) {
int res = 0;
for (int i = n; i > 0; i--) {
res += i;
}
return res;
}
现在我们只要找一个方法不用 乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C) 来实现这个功能
首先:for循环我们可以用递归来实现
public int sumNums(int n) {
int res = n;
res += sumNums(res - 1);
return res;
}
那么不用if等判断语句怎么停止递归计算呢?
这里我们可以使用 && 短路与逻辑运算符,&& 前面加一个 n > 0 ,当 n > 0 时进行后面的递归求和,直到 n 等于 0 的时候结束
因为 && 逻辑运算符只能应用于两个布尔值,所以在 res += sumNums(res - 1) 后面也加一个 == 0 的比较判断
为了程序的完整性,将该短路与的值赋值给一个boolean值,最后返回结果即可
public int sumNums(int n) {
int res = n;
boolean b = (n > 0) && (res += sumNums(res - 1)) == 0;
return res;
}
- 2.提交结果