「ソードフィンガーオファー」:カットロープ

「ソードフィンガーオファー」:カットロープ

どこに行くのかわかりませんが、もう途中です!
会ったことはありませんが、時間は急いでいますが、ユシに会いました。本当に素晴らしい運命です。ご来店ありがとうございました!
  • トピック
    長さnのロープを用意します。ロープを整数の長さのm個のセグメントに切断し(mとnは整数、n> 1とm> 1、m <= n)、各ロープの長さを記録してください。 k [1]、...、k [m]です。k [1] x ... xk [m]の可能な最大の積は何ですか?たとえば、ロープの長さが8の場合、2、3、3の長さで3つに切断します。この時点で得られる最大の積は18です。
    説明を入力してください:数字nを入力してください。意味については、タイトルを参照してください。(2 <= n <= 60)
    出力の説明:回答を出力します。
示例 1 :
输入:8
返回值:18
  • コード1:
# -*- coding:utf-8 -*-
class Solution:
    def cutRope(self, number):
        result = 1
        while number > 0:
            number = number -3
            if number == 1:
                result *= 4
                return result
            if number == 2:
                result *= 6
                return result
            result *= 3
        return result
  • アルゴリズムの説明:
    どのように分割しても、ロープの最初のカットは2つのセグメントに分割されるため、解決するためにサブ問題に分割できます;
    1 = 1;
    2 = 2;
    3 = 3;
    4 = 2 ×2;
    5 = 2×3;
    6 = 3×3;
    7を超えるすべての数値は2と3の積に分解でき、乗数に3が多く含まれると、積が大きくなります。
    したがって、numberいくつかを判断してください。 3つあり、徐々に-3操作を進めます。最終値が3未満であることを
    確認します。残りが1の場合、-3操作が実行されるnumber = 4の最大積は4のまま
    であることを意味します。残りが2の場合は、-3操作が実行される前のnumber = 55の最大積は6であり
    number <= 0プログラム終了するまでです。

おすすめ

転載: blog.csdn.net/qq_34331113/article/details/114998995