本文为剑指offer系列第二篇。
个人感觉属于奇淫巧技,但是是真的很巧妙,有利于打破思维定势。
题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
解题思路
思路1: 其实可以调用库函数
思路2: 可以使用 && 和 || 的熔断机制。
思路3:使用sizeof函数和右移操作。
解题代码
朴素思想代码
1 |
|
思路1代码
1 | class Solution { |
fma(x,y,z)函数作用是返回x*y+z. 我们让z为0,就变成了单纯的加法。
思路2代码
1 | class Solution { |
思路3代码
1 | class Solution { |
因为sizeof()函数可以用来计算对象空间大小,每个char是1个字节,所以对于大小为n*(n+1)的二维数组而言,空间就是n*(n+1). 结果右移一位等同于除以2.
由此我们可以推广到其他的数据类型上,比如int,每个int是4个字节,所以要在原来的基础上右移3位。
1 | class Solution { |
以上,本题结束!