劍指offer-求1+2+3+...+n

題目類型

進制轉化

題目描述

求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。
    • 利用左邊的表達式來作爲遞歸結束的判斷條件,遞歸的表達式在右邊。
    • 短路與&&:先判斷左側,左側爲真再判斷右側;左側爲假則無需判斷右側。在不斷遞歸時,直到左邊爲假時,纔不執行右邊。在第一次進行右邊的判斷時,就進入遞歸的調用。
class Solution {
public:
    int Sum_Solution(int n) {
        int ans=n;
        ans&&(ans+=Sum_Solution(n-1));//若ans爲0則遞歸終止
        return ans;
    }
};
運行時間:2ms
佔用內存:480k
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章