LeetCode之位运算

前言

在将LeetCode上标签为位运算的题目刷完了之后,这里做一些总结,以至于后续在碰到类似的问题时,优先能够给我们提供一个最初的解题思路

总结

  • 我们可以将位运算中的0和1可以表示为两种状态去处理某些只有两种状态下的问题
  1. 如LeetCode的784题,我们可以用0和1分别表示是否对字母进行转换或者不转换两种状态
  2. LeetCode的78题,同样可以用0和1分别表示数组的元素在解集中出现和不出现两种状态
  • 在位的异或中有以下的几种性质
1、a^a = 0
2、0^a = a
3、a ^ b = c, c ^ a = b, b ^ c = a

我们可以用性质1和2解决LeetCode的136题,采用性质3解决LeetCode的421题(需要加上越高位是1的值越大的性质)

  • 可以采用(n & (n-1))去除n的最低位的1,借助这个性质,可以解决类似于计算输入数的位1的个数,如LeetCode的191题
  • 对于一个2的次幂数,具有性质 ((n & (n-1)) == 0),借助这个性质可以解决LeetCode的231题
  • 对于一个4的次幂数,首先符合性质((n & (n-1)) == 0),并且位1的都出现在奇数位置上,借助这两个性质可以解决LeetCode的342题
  • 对于一个3的次幂数,符合如下的规则:
3^n 能够被3^(n-1)、3^(n-2)....3整除

借助这个性质可以解决LeetCode的题326

  • 如果我们想要获取一个数字的最低位的1,我们只需要借助以下的性质便可以得到
int n = x & ~x
  • 对于一些给定的有限的元素,我们可以采用位进行表示,如LeetCode的题187,由于序列固定了ACGT,因此我们可以分别用00,01,10,11分别进行表示,进而进行下一步。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值