原題目
給定乙個正整數 n,你可以做如下操作:. 如果 n 是偶數,則用 n / 2替換 n。
. 如果 n 是奇數,則可以用 n + 1或n - 1替換 n。
n 變為 1 所需的最小替換次數是多少?
示例 1:
輸入:8
輸出:3
解釋:8 -> 4 -> 2 -> 1
示例 2:
輸入:7
輸出:4
解釋:7 -> 8 -> 4 -> 2 -> 1
或7 -> 6 -> 3 -> 2 -> 1
題目大意
將任意乙個正整數,通過為偶數時除2,為奇數時加1或減1的方式,將其變為1,
並求出其最小步數。
題目分析
方法一,遞迴所有方案,將所有方案進行比較(只有奇數需比較),返回最小步數方案
方法二,規律,如果走到某個數是偶數,就將該數除2,如果是奇數,可以判斷該數加1除2是不是偶數,是偶數則加1,否則減1,因為除2的步數要少於加1減1的步數。
完整**
方法一:
int
min(
int a,
int b)
intfun
(long
long
int n,
int step)
else
}int
integerreplacement
(int n)
方法二:
int
integerreplacement
(int n)
s=s%2?
((s+1)
/2%2
?s-1
:s+1
):s/2;
step++;}
return step;
}
總結
無
397 整數替換
題目描述 給定乙個正整數 n 你可以做如下操作 如果 n 是偶數,則用 n 2替換 n 如果 n 是奇數,則可以用 n 1或n 1替換 n n 變為 1 所需的最小替換次數是多少?示例 1 輸入 n 8 輸出 3 解釋 8 4 2 1 示例 2 輸入 n 7 輸出 4 解釋 7 8 4 2 1 或 ...
397 整數替換
題目描述 給定乙個正整數 n,你可以做如下操作 1.如果 n 是偶數,則用 n 2替換 n。2.如果 n 是奇數,則可以用 n 1或n 1替換 n。問 n 變為 1 所需的最小替換次數是多少?可見,該題的難點在於n是奇數時,應該是n 1還是n 1。解法一 遞迴 當n 1時,return 0 將int...
369,整數替換
給定乙個正整數 n,你可以做如下操作 1.如果 n 是偶數,則用 n 2替換 n。2.如果 n 是奇數,則可以用 n 1或n 1替換 n。n 變為 1 所需的最小替換次數是多少?示例 1 輸入 輸出 解釋 8 4 2 1 示例 2 輸入 輸出 解釋 7 8 4 2 1 或7 6 3 2 1 01答案...