給你一根長度為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+7(1000000007),如計算初始結果為:1000000008,請返回 1
示例 1:
輸入: 2輸出: 1
解釋: 2 = 1 + 1, 1 × 1 = 1
class
solution
:def
cuttingrope
(self, n:
int)
->
int:
defremaindertimes
(base, index)
: result =
1while index >0:
if index %2==
1:result =
(result * base)
%1000000007
index = index //
2 base =
((base %
1000000007)*
(base %
1000000007))
%1000000007
return result
if n <=3:
result = n -
1else
: a, b = n //
3, n %
3if b ==0:
result = remaindertimes(
3, a)
%1000000007
elif b ==1:
result = remaindertimes(
3, a -1)
*4%1000000007
else
: result = remaindertimes(
3, a)*2
%1000000007
return result
劍指 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
此題在剪繩子 的基礎上,多了個取餘,因此不能用 math.pow 方法,需要自己實現求冪。這裡使用快速冪,可以當做模板,時間為o logn 空間為o 1 主要優化點是用右移運算子代替了除以2,用位與運算子代替了求餘來判斷乙個數是奇數還是偶數。注意,為什麼快速冪的指數用 long 型別?因為int範圍...