求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。
有了那麼多限制,剩下的我們可以選擇
既然是乙個等差數列,和為(n+1)*n/2
我們之前詳細**了位運算劍指offer對答如流系列 - 二進位制中 1 的個數,不需要+ - * / 就能夠實現加減乘除。 如果你對此比較熟練的話,可以直接求解,效率高和空間小,可以說非常優秀。
但是如果你希望輕鬆點的話,可以找規律:當n大於1時,和為f(n)=f(n-1)+n,n=1時,f(n)=1
因為第一種思路,**得如此詳細,不再貼**了。
我們直接展示一下第二種思路的方法
public int getsum(int n)
劍指Offer對答如流系列 醜數
我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...
劍指Offer對答如流系列 剪繩子
給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...
劍指Offer對答如流系列 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push 和 pop均容易實現。主要就是min函式的定義,如果要通過操作push和pop操作獲取最小元素時間複雜度為o 1 基本上是不可能的。如果我們另外定義乙個成員...