iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

Given a positive integer n, you can apply one of the following operations:

If n is even, replace n with n / 2.
If n is odd, replace n with either n + 1 or n - 1.
Return the minimum number of operations needed for n to become 1.


題目給咱一個正整數n,進行以下操作之一:

  • 如果n是偶數,將n 除2。
  • 如果n是奇數,將n +1或-1。
    我們的目標是返回將n變成1所需的最少操作次數。

我的解題思路:
0. 先隨便設想一下,感覺大部分n是奇數的情況-1會比+1更有效率(後來發現影響不大)
0. 仔細想過後發現要讓n是4的倍數才是最有利的(可以至少連續除2兩次)
0. 數字變成3時一定要-1

  • 99-1=98,98/2=49,49-1=48,48/2=24...,3-1=2,2/2=1
  • 99+1=100,100/2=50,50/2=25,25-1=24,24...,3-1=2,2/2=1
  1. 總之 n!=0 時要一直執行
  2. n是偶數就除2
  3. n是奇數時
  4. 如果n==3或n-1是4的倍數就執行n-1
  5. 不滿足4.就執行n+1
  6. 計算步驟並返回

class Solution {
    public int integerReplacement(int n) {
        int stp = 0;

        while (n != 1) {
            if (n % 2 == 0) {
                n = n / 2;
            } else {
                // n是奇數
                if ((n == 3) || ((n - 1) % 4 == 0)) {
                    n = n - 1;
                } else {
                    n = n + 1;
                }
            }
            stp++;
        }
        return stp;
    }
}

修正一些小錯誤之後成功執行!
https://ithelp.ithome.com.tw/upload/images/20241004/20169432GJs6NS1tzN.png


上一篇
day-18[medium.421]maximum xor of numbers in an array
下一篇
day-20[medium.491]nun-decreasing subsequences
系列文
轉生理工組後從零開始的leetcode刷題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言