- 求 1+2+3+...+n
正常的帶if的實現(xiàn)是這樣
public static int sumSolu(int n){
if(n<=0) return 0;
int sum=n;
sum+=sumSolu(n-1);
return sum;
}
一旦不需要if,就要利用&&的特點,第一個條件語句為 false 的情況下不會去執(zhí)行第二個條件語句
public int Sum_Solution(int n) {
int sum = n;
boolean b = (n > 0) && ((sum += Sum_Solution(n - 1)) > 0);
return sum;
}
- 不用加減乘除做加法
a ^ b 表示沒有考慮進位的情況下兩數(shù)的和,(a & b) << 1 就是進位。
遞歸會終止的原因是 (a & b) << 1 最右邊會多一個 0,那么繼續(xù)遞歸,進位最右邊的 0 會慢慢增多,最后進位會變?yōu)?0,遞歸終止
public int Add(int num1, int num2) {
return num2 == 0 ? num1 : Add(num1 ^ num2, (num1 & num2) << 1);
}
下一步,每天復習一個舊的,學習一個新的leetcode,