剑指 Offer 64. 求 1 + 2 + … + n(java解题)

offer,java,解题 · 浏览次数 : 20

小编点评

**1. 题目** 求 1+2+...+n 的值,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句。示例: 输入: n = 3 输出: 6 **2. 解题思路** 首先,我们可以考虑使用循环求解这个公式: 1. 使用循环求和所有数字的和。 2. 使用公式:1+2+...+n = n*(n+1)/2。 最后,为了“消除循环”,考虑使用递归: 1. 定义一个递归函数 `sumNums(n)`,参数 `n`。 2. 如果 `n` 的值为 1 或 0,则返回值 0。 3. 如果 `n` 的值大于 0,则递归调用 `sumNums(n-1)`,并将 `n` 的值与 `n-1` 的值的和相加。 4. 返回 `n` 的值。 **3. 数据类型功能函数总结** 无。 **4. java代码** ```java public class Solution { public int sumNums(int n) { boolean x = n >1 && (n += sumNums(n - 1)) > 0; return n; } } ```

正文

1. 题目

求 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2. 解题思路

求解这个公式,首先的常见想法是使用循环,但是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);
}

3. 数据类型功能函数总结

//无

4. java代码

class Solution {
    public int sumNums(int n) {
        boolean x=n>1 && (n+=sumNums(n-1))>0;
        return n;
    }
}

与剑指 Offer 64. 求 1 + 2 + … + n(java解题)相似的内容:

剑指 Offer 64. 求 1 + 2 + … + n(java解题)

leetcode《图解数据结构》剑指 Offer 64. 求 1 + 2 + … + n(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指Offer 05. 替换空格(java解题)

leetcode中《图解数据结构》的刷题记录,包含解题思路、java代码的知识点小结和遇到的一些错误类型,与君共勉。

剑指 Offer 32 - I. 从上到下打印二叉树(java解题)

leetcode《图解数据结构》剑指 Offer 32 - I. 从上到下打印二叉树的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)

leetcode《图解数据结构》剑指 Offer 32 - II. 从上到下打印二叉树II 的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)

leetcode《图解数据结构》剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 34. 二叉树中和为某一值的路径(java解题)

leetcode《图解数据结构》剑指 Offer 34. 二叉树中和为某一值的路径(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 55 - I. 二叉树的深度(java解题)

leetcode《图解数据结构》剑指 Offer 55 - I. 二叉树的深度(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 55 - II. 平衡二叉树(java解题)

leetcode《图解数据结构》剑指 Offer 55 - II. 平衡二叉树(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)

leetcode《图解数据结构》剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。

剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)

leetcode《图解数据结构》剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。