今天leetcode刷到一个比较简单的题目,因为题目看起来很简单,但是仔细一看有很多限制条件
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
这种题一看就是要用递归的套路,但是在结束递归条件上不知道怎么弄了
不能用if这些判断条件,想了一些办法,都越绕越远了
最后看了下官方的解答,又涨姿势了
基本思路就是:利用逻辑运算符的短路性质
比如&&,对于A&&B,如果A是true,那就继续执行B;如果A已经是false了,就不会去管B是true or false了
比如 || ,对于A||B,如果A是false,那就继续执行B,如果A已经是true可,就不会去管B是false or true了
所以java 利用 &&的解法就是
class Solution {
public int sumNums(int n) {
boolean flag = n > 0 && (n += sumNums(n - 1)) > 0;
return n;
}
}
想了下如果利用||怎么解呢
class Solution {
public int sumNums(int n) {
boolean flag = n <= 0 || (n+=sumNums(n-1)) >0;
return n;
}
}
网友评论