前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

1、求1到n和

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

限制:1 <= n <= 10000

示例 1:

输入: n = 3
输出: 6

示例 2:

输入: n = 9
输出: 45

1.1、解题思路

一般情况下,直接使用for循环,以及递归很好实现

如果是题目要求的解法:利用 && 特性,如果前部分错误了了,则不会执行后面的部分

1.2、算法

1.2.1、递归和for循环

 /**
     * 递归
     */
    public int recursion(int n) {
        if (n == 1){
            return 1;
        }
        return recursion(n-1) + n ;
    }

    /**
     * for循环
     */
    public int whileT(int n) {
        int sum = 0 ;
        for (int i = 1 ; i <= n ; i++){
            sum = sum + i ;
        }
        return sum;
    }

1.2.2、正确解法

/***
* 利用 && 特性,如果前部分错误了了,则不会执行后面的部分
* 事实上,还是使用了递归
*/
public int sumNums(int n) {
    boolean flag = n > 0 && (n += sumNums(n - 1)) < 0;
    return n;
}

1.3、测试

@Test
public void test(){
    // System.out.println(recursion(2));
    // System.out.println(whileT(2));
    System.out.println(sumNums(2));

}

ContactAuthor