题目描述
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例1
输入: n = 3
输出: 6
示例2
输入: n = 9
输出: 45
解题思路
直接上公式。
当 n 为偶数时,就是众所周知
当 n 为奇数时,要在上面式子的基础上再加上中间的数,中间的数就是 (n + 1) / 2,即公式为
对比上下两式,其实只要在最后面多出来的 (n + 1) 上加上一个系数 k,当 n 为奇数时 k = 1,当 n 为偶数时 k = 0。用与运算即可满足这个条件。
Java代码实现
class Solution { public int sumNums(int n) { return (n + 1) * (n >> 1) + (n & 1) * ((n + 1) >> 1); } }