LeetCode397 整數替換

2021-09-25 10:04:36 字數 998 閱讀 5280

原題目

給定乙個正整數 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答案...