剪繩子(Python and C 解法)

2022-08-24 19:33:15 字數 929 閱讀 8009

給你一根長度為 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。

示例 1:

輸入: 2

輸出: 1

解釋: 2 = 1 + 1, 1 × 1 = 1

示例 2:

輸入: 10

輸出: 36

解釋: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36

求最值,且子問題之間存在重疊的更小的子問題,應使用動態規劃求解。

1

class

solution:

2def cuttingrope(self, n: int) ->int:

3 dp = [0] * (n+1) #

初始化陣列,儲存面積結果

4 dp[0] = 1

5 dp[1] = 1

6for i in range(2, n+1):

7for j in range(1, i):8 #

max(dp[i]:維持之前的狀態,不再剪;dp[i-j]*j:從長為i的基礎上再剪一段長為j的,且剩下的i-j再繼續剪;(i-j)*j:從長為i的基礎上再剪一段長為j的,且剩下的i-j不再繼續剪)

9 dp[i] = max(dp[i], max(dp[i-j] * j, (i-j) *j))

10return dp[n]

1

class

solution

12 };

劍指Offer 剪繩子 和剪繩子

劍指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的三段,此時得到的...

整數反轉(Python and C 解法)

給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...

替換空格(Python and C 解法)

pyhon中有很多非常方便的替換操作,如 1 return s.replace 20 直接replace替換就行 1 s s.split 2return 20 join s 1 strlen len s 2 newstr 3for i in range strlen 4if s i 20 6 els...