面试题64.求1+2+…+n
题目描述
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000
题解1
使用递归解题,代码如下:
class Solution {
public int sumNums(int n) {
int sum = n;
boolean flag = (n>0)&&((sum+=sumNums(n-1))>0);
return sum;
}
}
提交结果1
题解2
使用等差数列的求和公式求解,和 = n(1+n)/2 = (n+n^2)/2,不能使用乘除法,但是除以2可使用位运算右移一位实现,代码如下:
class Solution {
public int sumNums(int n) {
return (int)(Math.pow(n,2)+n)>>1;
}
}