算法(LeetCode_1662_面试题64. 求1+2+…+n)

算法

:偶尔在Leetcode上刷一手算法,今天这个每日一题对我这种菜狗来说就很有感觉,看完官方题解直接恍然大悟,就很痛快,所以记一手。

题目

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

范例

示例 1:
输入: n = 3
输出: 6

示例 2:
输入: n = 9
输出: 45

难点及对应思路

  • 这题一看,害不就是求一手累加吗,但是他歹毒就歹毒在限制多得离谱,基础循环判断全都封了,连if都不让你用。第一反应:不让循环反手递归,然后当时的我就一手递归上头写着写着就用了if,然后交了 通过了,之后经过别人提醒,反应过来:我竟然用了if。。。。。
  • 思路,不让循环就递归,没得毛病,但是递归得跳出,而且不能用if和switch这些判断跳出,这时候得想到逻辑短路这个操作,即:A&&B,当A为false,那么B无论怎样结果都是false,那么计算机就不会去过B这里,若B是个运算语句,那么这条语句就会被跳过不执行,所以,如果我们将递归语句写在了B的位置,A的位置放上某个数字的检测,当这个数字达到检测值之后,B会被直接跳过,既不会再往下递归,递归就跳出了

java代码

class Solution {
    public int sumNums(int n) {
    //主函数调用这个方法
        int[]a = new int [1];
        a[0] = 0;
        sumNums2(n,a);
        return a[0];
    }
    public boolean sumNums2(int n,int []a)
    {
        a[0]+=n;
        return (n!=0)&&sumNums2(n-1,a);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值