剑指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

浙公网安备 33010602011771号