劍指offer 14 II 剪繩子 II

2021-10-22 03:53:17 字數 685 閱讀 2147

此題在剪繩子ⅰ的基礎上,多了個取餘,因此不能用 math.pow 方法,需要自己實現求冪。

這裡使用快速冪,可以當做模板,時間為o(logn),空間為o(1)。主要優化點是用右移運算子代替了除以2,用位與運算子代替了求餘來判斷乙個數是奇數還是偶數。

注意,為什麼快速冪的指數用 long 型別?

因為int範圍是[-2^31,2^31-1],負數的表示範圍比正數大,所以不能簡單取絕對值。如果底數正好是-2^31,而指數是 int 型別,則會溢位。

class

solution

int quotient = n /3;

int remainder = n %3;

if(remainder ==0)

else

if(remainder ==1)

else

}//快速冪模板, 注意指數 exponent 是 long 型別防止溢位,且為非負數

public

long

quickpow

(long base,

long exponent)

}

劍指 Offer 14 II 剪繩子 II

題目 給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。答案...

劍指 Offer 14 II 剪繩子 II

給你一根長度為 n 的繩子,請把繩子剪成整數長度的 m 段 m n都是整數,n 1並且m 1 每段繩子的長度記為 k 0 k 1 k m 1 請問 k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。答案需要取...

劍指 Offer 14 II 剪繩子 II

給你一根長度為n的繩子,請把繩子剪成整數長度的m段 m n都是整數,n 1並且m 1 每段繩子的長度記為k 0 k 1 k m 1 請問k 0 k 1 k m 1 可能的最大乘積是多少?例如,當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到的最大乘積是18。答案需要取模 1e9 ...