【Java】力扣 - 刷题笔记 - 剑指 Offer 64

【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.提交结果
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35132089/article/details/107929164