剑指 Offer 64:求1+2+…+n Java逻辑符短路

简介: 求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

一、题目描述



求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。


示例 1:

输入: n = 3

输出: 6


示例 2:

输入: n = 9

输出: 45


限制:

1 <= n <= 10000


二、思路讲解



       1、不能使用首尾相加求平均值的方式,因为不能用除法;

       2、不能使用循环相加的方式,因为不能用for、while;

       3、递归的跳出判断需要使用 if 等条件判断


思考之后发现,还是应该使用递归,难点在于使用什么来代替条件判断,时递归在n=1的时候跳出。


答案是逻辑符的短路问题:例如:if (A && B),当A不满足的时候,就不会走B。那么我们可以在A处判断n是否为1,而将递归入口放在B处,当A不满足,B处的递归就不会走入,从而终止递归。像这样 n > 1  &&  sumNums(n-1)>0,当n==1时,就不会走入后面的递归。


三、Java代码实现



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


相关文章
|
3月前
|
搜索推荐 Java 索引
|
3月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
56 1
|
3月前
|
搜索推荐 Java 索引
|
3月前
|
搜索推荐 Java 索引
|
3月前
|
搜索推荐 Java 索引
|
22天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
20 0
|
3月前
|
运维 Java 程序员
新手进阶:用对if-else,让你的Java逻辑判断不再纠结!
新手进阶:用对if-else,让你的Java逻辑判断不再纠结!
74 3
|
3月前
|
Java 开发者
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案
在Java编程中,if-else与switch作为核心的条件控制语句,各有千秋。if-else基于条件分支,适用于复杂逻辑;而switch则擅长处理枚举或固定选项列表,提供简洁高效的解决方案。本文通过技术综述及示例代码,剖析两者在性能上的差异。if-else具有短路特性,但条件增多时JVM会优化提升性能;switch则利用跳转表机制,在处理大量固定选项时表现出色。通过实验对比可见,switch在重复case值处理上通常更快。尽管如此,选择时还需兼顾代码的可读性和维护性。理解这些细节有助于开发者编写出既高效又优雅的Java代码。
55 2
|
3月前
|
搜索推荐 Java