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));
}
}
};