求 1+2+3+...+n --剑指offer

Posted nlw-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求 1+2+3+...+n --剑指offer相关的知识,希望对你有一定的参考价值。

题目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路一:递归求1+2+...+n 递归的结束语句用短路&&
public class Solution {
    public int Sum_Solution(int n) {
        int sum=0;
        boolean flag=n>0  && (sum +=n + Sum_Solution(n-1)) > 0;
        return sum;
    }

}

思路二:类似于快速幂计算 a*b

先写出原方法

public class Solution {
    public int Sum_Solution(int n) {
        int a = n;
        int b = n+1;
        int sum=0;
        while (a != 0){
            if((a & 1) == 1) sum += b;
            a >>= 1;
            b <<= 1;
        }
        return  sum >> 1;
    }
 
}

用&&和递归改进后的

public class Solution {
    public int Sum_Solution(int n) {
        return sum(n,n+1) >> 1;
    }
    private int sum(int a,int b){
            int sum=0;
            boolean is1=(a & 1) == 1 && (sum += b) > 0;
            a >>= 1;
            b <<= 1;
            boolean is2=(a != 0)&&(sum +=sum(a,b))>0;
            return sum;
    }

}

 && 前边就相当于条件 只有前边符合才可以进行下边的运算

 

以上是关于求 1+2+3+...+n --剑指offer的主要内容,如果未能解决你的问题,请参考以下文章

求1+2+3+...+n

求1+2!+3!+...+20!的和

求1+2+3+...+n

求1+2+3+...+n

求1+2+3+...+n

求1+2+3+……+n