题解
在 O(1) 内求一个数二进制形式时最低为 1 的位
例如 12 的二进制形式 1100,则 12 二进制形式时最低为 1 的位为倒数第 3 位。
如果我们从最低位向最高位一位一位判断的话,时间复杂度为 O(n),显然是无法满足要求的。
O(1) 方法
既然常规途径不符合要求,我们就要考虑一些技巧性的东西来帮我们寻找答案。 我首先想到的是位操作。关于位操作你可以参考一下我之前的一篇博客绝对值函数(位操作法)。基本上所有的高级语言都提供了对位操作的支持,由于最近我在学习 Python,所以这次我就尝试用 Python 来解决这个问题。
# -*- coding: utf-8 -*-
# python 2.7.3
# lob.py 2014/06/20
# author: sfyumi
# email: ieatyumi@163.com
import math
#least one bit
def lobof(number):
num = ~number
num += 1
num = num^number
nu