最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

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

来源:博客园


(相关资料图)

目录
  • 1. 题目
  • 2. 解题思路
  • 3. 数据类型功能函数总结
  • 4. java代码

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;    }}

关键词: 数据类型 条件判断语句 禁止使用