求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
作者:Krahets
链接:https://leetcode.cn/leetbook/read/illustration-of-algorithm/9h44cj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
求解这个公式,首先的常见想法是使用循环,但是for、while禁止使用,第二个思路是形成公式,1+2+……+n=n*(n+1)/2
,但是没办法将公式转化为非乘除的形式,最后,为了“消除循环”,考虑使用递归。递归除了需要使用if-else,其他方面能够满足要求。
在解题的过程中,我一时间没有意识到if-else被禁止,因此还是使用传统的递归结构。
但是官方题解显然更进一步,使用逻辑表达式消除了if-else结构,相当巧妙
boolean x=n>1 && (n+=sumNums(n-1))>0;
return n;
//等价于
if(n==1||n==0){
return 0;
}
else{
return n+sumNums(n-1);
}
//无
class Solution {
public int sumNums(int n) {
boolean x=n>1 && (n+=sumNums(n-1))>0;
return n;
}
}
leetcode《图解数据结构》剑指 Offer 64. 求 1 + 2 + … + n(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 32 - I. 从上到下打印二叉树的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 32 - II. 从上到下打印二叉树II 的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 34. 二叉树中和为某一值的路径(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 55 - I. 二叉树的深度(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。
leetcode《图解数据结构》剑指 Offer 55 - II. 平衡二叉树(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。