繁体   English   中英

将十进制转换为二进制并将其用作过滤器

[英]Converting decimal to binary and using it as a filter

因此,用户输入一个数字,然后给出键值对(键从0到n)的映射。 例如。 数字= 6映射= {{0,a},{1,b},{2,c},{3,d},{4,e},{5,f}}问题是将数字转换为二进制(在这种情况下为110)和地图中的打印元素,这些元素的第1位与其位置相对应。 在这种情况下,打印{0,a}和{1,b},因为它们对应于“ 110”

我将该数字转换为二进制,方法是将其递归除以2,然后从末尾遍历数组,如果位为1,则在Map中打印相应的值。

在实习期间有人问我,对于我的解决方案,我被告知这是非常低效的,而且时间和空间复杂度很高。 我被要求使用AND运算符来有效地做到这一点。 没有更多的消息,我们继续前进。 我仍然想知道如何使用AND运算符完成此操作。 所以我想知道在这里应该如何使用AND运算符来获得解决方案

您需要知道给定数字中设置了哪些位,以便可以使用相应的键打印数字。

使用按位与运算符,您可以屏蔽掉这些位并检查它们是否被设置。

以下是JS中的语言,但与其他语言非常相似:

 const num = 6; let mask = 1; for(let i = 0; i < 8; i++) { console.log("num (binary rep):\\t", ("0".repeat(7) + num.toString(2)).slice(-8)) console.log("mask (binary rep):\\t", ("0".repeat(7) + mask.toString(2)).slice(-8)) console.log(!!(num & mask)); console.log(i+1, `th bit is${num & mask ? "" : " not"} set!`) console.log("*".repeat(20)) mask = mask << 1; } 

上面的代码中出于演示目的有很多不足之处,但归结为以下几行:

if (mask & num)
    console.log("Hurray! Set! Do stuff")
mask = mask << 1

现在,由于字典的键都是从0开始并以1递增的所有整数,因此您可以将检查它们的逻辑合并到上述循环中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM