劍指offer js實現剪繩子

2021-10-01 09:45:23 字數 614 閱讀 8274

題目:給你一根長度為n的繩子,請剪成m段n>1,m>1,使剩下的繩子乘積為最大值.

例:8 => 2 * 3 * 3 = 18

思路:動態規劃,比如8,第一次切割可以分成8-1種切法,將最優解儲存起來。

let n =8;

function

cut()if

(res[n]

)return res[n]

;let max =0;

for(

let i =

4;i<=n;i++

) res[i]

= max;

}return res[n];}

}let f =

cut();

f(n)

;

使用閉包儲存陣列.

思路2:貪婪演算法,如果超過5的話,那麼其實都拆分成了3 和 2 因為3(n-3)>n,3(n-3)>=2(n-2)

所以我們全部拆分成3 或者 2

如果是10,那麼不能拆分成3 3 3 1 而要拆分成 3 3 2 2

function

cut2

(n)

劍指 剪繩子

1,題目 2,思路 方法一 這個是通過數字找規律的 第一步 定義dp n 的值的含義為 數字n的乘積最大值 n 2 1 1 11 1 dp 2 1 n 3 2 1 21 2 dp 3 2 n 4 2 2 22 4 dp 4 4 n 5 3 2 32 6 dp 5 6 貌似看不出規律,別急再多寫幾個 ...

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

剪繩子 演算法 424,劍指 Offer 剪繩子

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