剑指offer64 求1+2+...+n

这题不让用判断循环乘除等运算或语句,剑指offer上说的方法又都太用语言特性了。这方面我还很欠缺,但是牛客网上大神还是给出了很多好的解答的:

首先是利用&&的短路特性的。

//其实只要先看我们手里有什么牌就能一步一步想到利用短路特性了
//我们手里现在可以使用(按优先级高低)单目运算符:++和--,双目运算符:+,-,移位运算符<<和>>,关系运算符>,<等,逻辑运算符&&,||,&,|,^,赋值=
//单目和双目的作用是一样的,移位显然没有规律性,因为一个二进制位并不能区分某个数和其他数,这也就排除了&,|,^,因为不需要做位运算了
//关系运算符要和if匹配,但这是不行的,这时看看剩下的运算符只能选&&,||了
//如果做过Java笔试题,会对这两个运算符非常敏感,他们有短路特性,前面的条件判真(或者假)了,就不会再执行后面的条件了
//这时就能联想到--n,直到等于0就能返回值。
public class Solution {
    public int Sum_Solution(int n) {
        int sum = n;
        boolean flag = (sum>0)&&((sum+=Sum_Solution(--n))>0);
        return sum;
    }
}

再附一个python的:

class Solution:
    def Sum_Solution(self, n):
        # write code here
        ans=n
        temp=ans and self.Sum_Solution(n-1)
        ans=ans+temp
        return ans

 

posted @ 2019-03-06 20:52  大胖子球花  阅读(98)  评论(0)    收藏  举报