[Facebook] Given an integer, add its binary number by 1 without “+” 整数加一, 不用加号.
一亩三分地上看的,不是我的面试, 写一个吧…感觉不是很难
public int add(int n) { for(int i = 0; i < 32; i++) { if (((1 << i) & n) == 0){ //until we find the first 1 bit n = n | (1 << i); break; } else n = n & ~(1 << i); // clean bits } return n; }
算法思路:
- i是游标, (1 << i) 就是对n的每个位从右往左扫.
- if判断的是, 如果这位是 0, 那么就变成1.
- 如果不是, 那么这位肯定是1, 那么在未来的某次循环需要把0 变成1时, 这位肯定要变成0, 所以如果是1 就是0.
- 这里用的是clean bits的方法. 先去取反做mask, 再取与(and).
Leave A Comment