出鞘之劍指offer 第14題 剪繩子

2021-10-06 01:59:47 字數 1301 閱讀 1979

給你一根長度為n的繩子,請把繩子剪成m段(m和n都是整數,n>1並且m>1), 每段繩子的長度記為k[0],k[1],...,k[m]. 請問k[0]*k[1]*...*k[m]可能的最大乘積是多少?

使用動態規劃。

package offer.xzs.fourteenth;

public class demo01

public static int getmuil(int length)

if (length == 2)

if (length == 3)

int results = new int[length + 1];

results[0] = 0;

results[1] = 1;

results[2] = 2;

results[3] = 3;

int max = 0;

//從4開始,是因為4之前的長度剪開得到的乘積數還不如長度本身長,所以到時候直接用長度去運算

for (int i = 4; i <= length; i++)

results[i] = max;}}

max = results[length];

return max;

}}

更簡潔的方法 

package offer.xzs.fourteenth;

public class demo02

public static int getmuil(int length)

}return dp[length];

}}

貪婪演算法,當繩子長度大於4時,盡可能地多剪長度為 3 的繩子,當剩下的繩子為 4 時,剪成兩段長度為2的繩子。

package offer.xzs.fourteenth;

public class demo03

public static int getmuil(int length)

if (length == 2)

if (length == 3)

int duan3 = length / 3;

if (length - duan3 * 3 == 1)

int duan2 = (length - duan3 * 3) / 2;

int result = (int) (math.pow(2, duan2) * math.pow(3, duan3));

return result;

}}

出鞘之劍指offer 第12題 矩陣中的路徑

設計乙個函式,判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意一格開始,每一步可以在矩陣中上 下 左 右移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。用回溯法,也就是相當於暴力 package offer.xzs.twelvfth public ...

出鞘之劍指offer 第18題 刪除鍊錶的節點

題目一 在o 1 時間內刪除鍊錶節點 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點定義如下 struct listnode void deletenode listnode head,listnode temp 如果節點是尾節點,則,從頭結點開始遍歷,遍歷到前...

出鞘之劍指offer 第19題 正規表示式匹配

實現乙個函式用來匹配 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示他前面的字元可以出現任意次 含0次 在本題中,匹配是指字串的所有字元匹配整個模式。用遞迴來做。如果掃瞄到 就有三種情況。掃瞄到 就有一種情況。package offer.xzs.nineteenth public cla...