剑指offer--二进制中1的个数&&打印从1到最大的n位数

这篇博客介绍了如何使用位运算和循环来计算一个无符号整数二进制表示中1的个数,提供了三种不同的实现方式。此外,还展示了如何打印从1到指定位数的最大十进制数的序列。涉及的编程概念包括二进制转换、位运算和循环控制。
摘要由CSDN通过智能技术生成

题目一:

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。

示例 1:

输入:n = 11 (控制台输入 00000000000000000000000000001011)
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。

思路一:

输入的十进制数直接转为二进制数,然后循环字符,十进制转二进制就不在这里单独说了,直接看代码

代码:

class Solution:
    def hammingWeight(self, n: int) -> int:
        a, b, c = n,"",0
        while(a>=1):
            b = str(a%2)+b
            a=a//2
        for i in str(b):
            if int(i)==1:
                c+=1
        return c

思路二:

利用位运算,因为控制台会自动帮我们转为二进制,分两种情况,n&1=0,说明n的最右边一位是0;n&1=1,最右边一位是1,然后采用正数右移的方法。

代码:

class Solution:
    def hammingWeight(self, n: int) -> int:
        res = 0
        while n:
            res += n&1
            n>>=1#右移
        return res

思路三:调用函数

class Solution:
    def hammingWeight(self, n: int) -> int:
        return bin(n).count('1')#最快

题目二:

 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

代码:

class Solution:
    def printNumbers(self, n: int) -> List[int]:
        num  = 10**n-1
        list = []
        for i in range(1,num+1):
            list.append(i)
        return list

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值