我正在尝试解决LeetCode上的以下问题;编写一个函数,该函数接受一个无符号整数,并返回它所具有的'1‘位数。约束:输入必须是长度为32的二进制字符串。
我已经为输入00000000000000000000000000001011和00000000000000000000000010000000 (由网站内部提供)编写了以下代码,但为输入11111111111111111111111111111101提供了输出0,并在我的本地编译器中为最后一个输入提供了"out of range“。
class Solution {
// you need treat n as an unsigned value
fun hammingWeight(n:Int):Int {
var num = n
var setCountBit = 0
while (num > 0) {
setCountBit++
num= num and num-1
}
return setCountBit
}
}

发布于 2021-05-23 16:34:41
为了正确地将二进制字符串转换为Int并避免“超出范围错误”,您需要执行以下操作(我相信LeetCode在幕后也做了同样的事情):
fun binaryStringToInt(s: String): Int = s.toUInt(radix = 2).toInt()"11111111111111111111111111111101"等同于4294967293。它大于Int.MAX_VALUE,因此在.toInt()转换后它将表示为负数(在本例中为-3)。
实际上,这个问题可以用Kotlin 1.4中的一行代码来解决:
fun hammingWeight(n: Int): Int = n.countOneBits()但是LeetCode使用的是Kotlin 1.3.10,所以你需要调整你的解决方案来处理负的Int。
发布于 2021-05-22 22:19:56
请在给定值大于input类型可以存储的最大值时,将输入变量的类型从Int更改为,如Double .At。
https://stackoverflow.com/questions/67650324
复制相似问题