【数据结构算法】二进制中1的个数

本文介绍了一种计算整数(包括正数和负数)二进制表示中1的个数的方法。对于非负整数,直接转换为二进制形式;对于负数,则采用补码表示,并通过增加1来实现转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

解题思路

首先明白一个整数类型的(int)是4个字节,也就是32位.
然后分开处理:

  1. 对于大于等于0的数:直接转换成二进制数可以了,注意高位空的用0来补充,一定要是32位:例如4的二进制数“[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]”(怎么转换的可以看下我下面的代码,或者自己去百度)
  2. 对于负数,我们要去他的补码:首先将负数取绝对值去其绝对值的二进制数(注意一定要保留32位,高位空的用0来补),然后直接加一个1就可以了(注意进位!)
# -*- coding:utf-8 -*-
def ZhengSConvert(n):

    s=[]
    while True:
        s.append(n%2)
        n=n//2
        if n==0:
            break
    a=[0]*64
    s.extend(a)
    return s[:32]
        
def counterOne(L):
    if L is None or L==[]:
        return 0
    num=0
    for v in L:
        if v==1:
            num+=1
    return num



class Solution:
    def NumberOf1(self, n):
        # write code here
        s=None
        if n>=0:
            s=ZhengSConvert(n)
            print(s)
            return counterOne(s)
        else:
            n=0-n
            s=ZhengSConvert(n)
            print(s)
            s=[(x+1)%2 for x in s]
            print(s)
            c=1
            for i,v in enumerate(s):
                if c==0:
                    break
                temp=v+c
                s[i]=temp%2
                c=temp//2
            print(s)
            return counterOne(s)
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值