leetcode 397の整数を交換します

1の出現するには?最低1回変更!

タイトルは次のとおりです。
正の整数を考えるとnは、次のことが可能です。
(1)の場合N N / 2 nの交換で、さえあります。
(2)nが奇数であり、n + 1が使用されるか、またはNできる場合- 1 N交換。
1に必要な代替品の最小数nは番号のですか?

実施例1
入力:
8
出力:
3
説明:
8 - > 4 - > 2 - > 1
例2
入力:
7
出力:
4
説明:
7 - > 8 - > 4 - > 2 - > 1
または
7 - > 6 - > 3 - > 2 - > 1

実践分析のトピック

  • ある場合でも、数は ==2で割り切れます 一度に交換==
  • ある場合は奇数 ==は、N + 1 / N - 1 あるいは小さい値をとる、請求

あなたは神秘的なまだ観客を垣間見るところ、私は知らないのですか?
これではありません赤い果実黙示

再帰!

分析コーディング

n型 オペレーティング
奇数 1を返します(代替的なN + 1のN / 2個を使用して)+ integerReplacement(N / 2) の(別のN / 2の数を返します)
さえ リターン2 (代替的なN + 1の(N-1)/ 2又は(N-1)/ 2個) + MIN(integerReplacement((T-1)/ 2)、integerReplacement((T + 1)/ 2)) (バックN-1)より少ない数で2 /代替及び(N-1)/ 2)

再帰大法は良いヽ(¯▽¯)テクノです

コードは以下の通りであります:

class Solution {
public:
    int cnt = 0;
    int integerReplacement(int n) {
        if(n == 1) return 0;
        if(n % 2 == 0) return 1 + integerReplacement(n / 2);
        else {
            long long t = n;
            return 2 + min(integerReplacement((t-1)/2),integerReplacement((t+1)/2));
        }
    }
};
公開された34元の記事 ウォンの賞賛0 ビュー589

おすすめ

転載: blog.csdn.net/Luyoom/article/details/103705944