題目類型
進制轉化
題目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
code
- 數學公式
class Solution {
public:
int Sum_Solution(int n) {
return (1+n)*n/2;
}
};
運行時間:3ms
佔用內存:500k
- 遞歸
class Solution {
public:
int Sum_Solution(int n) {
if(n==1)
return 1;
return n+Sum_Solution(n-1);
}
};
運行時間:3ms
佔用內存:360k
- 短路求值
- 什麼是“短路求值”?
作爲"&&“和”||"操作符的操作數表達式,這些表達式在進行求值時,只要最終的結果已經可以確定是真或假,求值過程便告終止,這稱之爲短路求值(short-circuit evaluation)。這是這兩個操作符的一個重要屬性。(from百度百科)- expr1 && expr2
假如expr1和expr2都是表達式,並且expr1的值爲0,在上述邏輯表達式的求值過程中expr2將不會進行求值,因爲整個邏輯表達式的值已經可以確定爲0。 - expr1 || expr2
如果expr1的值非0,那麼在上述邏輯表達式的求值過程中expr2將不會進行求值,因爲整個邏輯表達式的值已經確定爲1。
- expr1 && expr2
- 利用左邊的表達式來作爲遞歸結束的判斷條件,遞歸的表達式在右邊。
- 短路與&&:先判斷左側,左側爲真再判斷右側;左側爲假則無需判斷右側。在不斷遞歸時,直到左邊爲假時,纔不執行右邊。在第一次進行右邊的判斷時,就進入遞歸的調用。
- 什麼是“短路求值”?
class Solution {
public:
int Sum_Solution(int n) {
int ans=n;
ans&&(ans+=Sum_Solution(n-1));//若ans爲0則遞歸終止
return ans;
}
};
運行時間:2ms
佔用內存:480k