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

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

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

自己没有思路

 看的别人的思路:

因为不能使用判断,循环等语句,所以只能用别的方法来替代判断条件

短路&&的话有一个判断机制

当前面一个条件为假时,后面的条件不会继续判断

当前面的条件为真时,后面的条件才会继续判断

在n > 0 && (sum += Sum_Solution(n - 1)) ;这里如果单独这样写的话,java中这不算是一个statement  报错  error: not a statement

必须要是一个声明的话,就要有赋值,而且n > 0是一个判断语句,所以得到的是boolean,所以

boolean flag = n > 0 && (sum += Sum_Solution(n - 1)) 

还是会报错: error: bad operand types for binary operator '&&'

但是这句判断语句的后面sum += Sum_Solution(n - 1)是一个求值,要想是判断的话,要加上(sum += Sum_Solution(n - 1))>0

即为最后的  boolean flag = n > 0 && (sum += Sum_Solution(n - 1)) > 0;

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

  

原文地址:https://www.cnblogs.com/SkyeAngel/p/8628740.html