美文网首页
将二进制表示减到 1 的步骤数

将二进制表示减到 1 的步骤数

作者: WAI_f | 来源:发表于2020-07-26 15:44 被阅读0次

题目:

给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:

  • 如果当前数字为偶数,则将其除以 2 。
  • 如果当前数字为奇数,则将其加上 1 。

题目保证你总是可以按上述规则将测试用例变为 1 。

示例:

输入:s = "1101"
输出:6
解释:"1101" 表示十进制数 13 。
Step 1) 13 是奇数,加 1 得到 14
Step 2) 14 是偶数,除 2 得到 7
Step 3) 7 是奇数,加 1 得到 8
Step 4) 8 是偶数,除 2 得到 4
Step 5) 4 是偶数,除 2 得到 2
Step 6) 2 是偶数,除 2 得到 1

解题方法:

按照题目要求遍历字符串处理就行了:

  • 计算当前字符实际大小:k=s[i]-'0'+carry
  • 判断k大小:1. k==1,很明显,按照题目意思,需要加1然后除2,操作步骤为2,且会有一个进位;2. k==2,这个时候最后一位实际是0,有一个进位,对应操作步骤为1;k==0,很简单,没有进位,且操作数为1,最简单的情况;
  • 最后就是对字符串第一个字符单独处理。

代码和结果:

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;
    }

};
运行结果:

最近感觉身心俱疲,确实有点累了,今天睡醒过来,想打游戏,挣扎了半天还是刷起了题,感觉刷题也算是一种消遣吧,虽然有的时候真的觉得刷起来好难,但是做出来的时候还是很开心的。

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

相关文章

  • 第4周学习笔记

    1404. 将二进制表示减到 1 的步骤数 题目: 思路: 第一次解法(行不通,会超时):把二进制数通过Math....

  • 将二进制表示减到 1 的步骤数

    题目: 给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数:如果当前数字为偶数...

  • 1404. 将二进制表示减到 1 的步骤数

    题目: 给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数: 如果当前数字为偶...

  • 二进制位运算---左移(<<)右移(>>

    (1).二进制中负数的计算 负数以正数的补码表示 原码:一个整数按照绝对值的大小转化成二进制的数 反码:将二进制数...

  • 原码 补码 leetcode 137 python注意点

    二进制表示 计算机使用二进制表示数字,加入使用8位二进制表示数字,每位取0或1,能表示2^8=256个数。 方案1...

  • <<剑指offer>>--javascript(9)-二进制数中

    二进制数中1的个数 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 代码如下: 基本思...

  • 11:二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路 n - 1 可以将最低位的1...

  • 剑指offer--11. 二进制中1的个数

    题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 思路:二进制数每位挨个和 1 (左移后其实不...

  • 二进制中1的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 问题分析 每次n&(n-1)操作将消失...

  • 4 | 二进制 -如何表示数字

    如何用01 表示更多的数? 1 个二进制值可以表示1个数,把真和假 当做 1 和 0.像表示更多的东西 ,加位数 ...

网友评论

      本文标题:将二进制表示减到 1 的步骤数

      本文链接:https://www.haomeiwen.com/subject/ldnwlktx.html