將二進(jìn)制表示減到 1 的步驟數(shù)

題目:

給你一個以二進(jìn)制形式表示的數(shù)字 s 。請你返回按下述規(guī)則將其減少到 1 所需要的步驟數(shù):

  • 如果當(dāng)前數(shù)字為偶數(shù),則將其除以 2 。
  • 如果當(dāng)前數(shù)字為奇數(shù),則將其加上 1 。

題目保證你總是可以按上述規(guī)則將測試用例變?yōu)?1 。

示例:

輸入:s = "1101"
輸出:6
解釋:"1101" 表示十進(jìn)制數(shù) 13 。
Step 1) 13 是奇數(shù),加 1 得到 14
Step 2) 14 是偶數(shù),除 2 得到 7
Step 3) 7 是奇數(shù),加 1 得到 8
Step 4) 8 是偶數(shù),除 2 得到 4
Step 5) 4 是偶數(shù),除 2 得到 2
Step 6) 2 是偶數(shù),除 2 得到 1

解題方法:

按照題目要求遍歷字符串處理就行了:

  • 計算當(dāng)前字符實際大?。?code>k=s[i]-'0'+carry;
  • 判斷k大小:1. k==1,很明顯,按照題目意思,需要加1然后除2,操作步驟為2,且會有一個進(jìn)位;2. k==2,這個時候最后一位實際是0,有一個進(jìn)位,對應(yīng)操作步驟為1;k==0,很簡單,沒有進(jìn)位,且操作數(shù)為1,最簡單的情況;
  • 最后就是對字符串第一個字符單獨處理。

代碼和結(jié)果:

class Solution {
public:
    int numSteps(string s) {
        int carry=0;
        int cnt=0;
        for(int i=s.size()-1;i>0;i--)
        {
            int k=s[i]-'0'+carry;
            if(k==1)
            {
                cnt+=2;
                carry=1;
            }
            else if(k==2)
            {
                cnt+=1;
                carry=1;
            }
            else
            {
                cnt++;
            }
        }
        int k=s[0]-'0'+carry;
        if(k==1) return cnt;
        else return cnt+1;
    }

};

運行結(jié)果:

最近感覺身心俱疲,確實有點累了,今天睡醒過來,想打游戲,掙扎了半天還是刷起了題,感覺刷題也算是一種消遣吧,雖然有的時候真的覺得刷起來好難,但是做出來的時候還是很開心的。

原題鏈接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-in-binary-representation-to-one/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容