Leetcode刷题之旅(每日一题)--面试题64. 求1+2+…+n(不使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C))

题目描述

在这里插入图片描述
不让用乘除法那第一印象就是递归。但不用条件判断的情况下何时让递归停止呢,思考半天也没有头绪,只能参考官方解答。利用短路与来进行条件的判断。

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

另一种想法就是用n*(n+1)/2公式来算,除2可以用>>实现,但是乘法怎么实现。官方解答是用位运算和加法实现乘法(叫做俄罗斯农民乘法)。这样就能得到。
个人认为还是用短路与来进行递归运算十分巧妙。

你可能感兴趣的:(Leetcode刷题之旅(每日一题)--面试题64. 求1+2+…+n(不使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)))