题解 | #二进制中1的个数#

二进制中1的个数

https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @return int整型
 */
func NumberOf1(n int) int {
	// write code here
	var res int

	// 将 n 转换为 32 位二进制形式
	if n < 0 {
		n = n & 0xffffffff // 与 32 位 1 相与
	}
    // 每次 n-1 需要向高位的 1 借,相与后高位就变成了 0
	// 110011 110010  -> n = 110010
	// 110010 110001  -> n = 110000
	// 110000 101111  -> n = 100000
	// 100000 011111  -> n = 000000
	// 共四次
	for n != 0 {
		n = n & (n - 1)
		res++
	}

	return res
}

全部评论

相关推荐

fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务