剑指 Offer 64. 求1+2+…+n
解题思路
解法1:
1.分析题意,我们知道 1+2+...+n实际等于n(n+1)/2
2.题中要求不可以使用乘除,所以我们想到转换,除以2其实也可以用向右移一位操作
3,.n(n+1)=pow(n,2)+n
解法2:
1.题目要求不可以使用for,但是可以转换使用递归
2.不可以使用if判断,则加入&&判断
解题遇到的问题
无
后续需要总结学习的知识点
递归需要深入学习总结一下
##解法1
class Solution {
// 要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
public int sumNums(int n) {
// 分析题意,我们知道 1+2+...+n实际等于n*(n+1)/2
// 题中要求不可以使用乘除,所以我们想到转换,除以2其实也可以用向右移一位操作
// n*(n+1)=n*n+n,不可以用for,所以可以换成递归操作
return (int) (Math.pow(n, 2) + n) >> 1;
}
}
##解法2
class Solution {
// 要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
public int sumNums(int n) {
int sum = n;
// 不可以使用if判断,则加入&&判断
// 题目要求不可以使用for,但是可以转换使用递归
boolean isFlag = n > 0 && (sum = sum + sumNums(n - 1)) > 0;
return sum;
}
}
网友评论