397 整數替換

2022-07-25 12:39:08 字數 1137 閱讀 1329

題目描述:

給定乙個正整數 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型的值傳給m時,需要將m的型別申明為long long型。因為如果int 型的n為2147483647時,m=(n+1)/2的過程中n+1就會溢位。

int, long int都是4個位元組的有符號數,最大值為2147483647.

可以將int型的實參傳遞給long long型的形參。

class

solution

}};

解法2:利用位運算

1

class

solution

15 res+=2

;16 }//

這乙個if判斷語句中包含了兩種情況,舉個例子:110111 首先初次判斷為奇數,右移一位,相當於-1,再除以2 這時候res=2,n=011011,再次判斷為奇數,+1,n=011100 這個結果與最初的n=110111先加1n=111000再右移1位是一樣的n=011100 所以這樣的操作以後res+=2;

17//

倘若最開始的n=1101,那麼初次判斷以後為奇數,-1,/2,此時n=0110就不用再進行加1操作了

//(n-1)/2 +1 ==(n+1)/2

18else

1923}24

return res+n-1;25

}26 };

這道題有一定的技巧,感覺時間是在o(1)(菜雞瞎猜的,這道題感覺是個腦力題,不僅要求對位運算熟悉,還要求要對整數的二進位制表示很熟悉,在leetcode上擊敗了100%的c++使用者,在時間上)

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 或 ...

LeetCode397 整數替換

原題目給定乙個正整數 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...

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答案...