标签:des 解法 amp span -- 利用 str solution div
1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int ans=0; 5 int index=1; 6 while (index!=0){ 7 if (n&index) ans++; 8 index<<=1; 9 } 10 return ans; 11 } 12 };
思路2:利用二进制特点
1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count=0; 5 while (n){ 6 count++; 7 n=(n-1)&n; 8 } 9 return count; 10 } 11 };
n-1是将 二进制n中的最右的1变成0的操作 ,例如 101000 减去1 的 100111
(n-1)&n 则是消除最右边的1的操作 101000 & 100111 = 100000
即每操作一次就可以消除一个1。
用这个方法也可解下列问题
问题1: 判定一个整数是否是2的整数次方
如果是2的整数次方,那么其的二进制只有一个1, 即:if((n-1)&n==0) printf("YES\n");
问题2: 两个整数n与m,问最少要改变多少个数字(对其二进制操作),可以使n与m相等。
先对n与m取异或。在统计有多少个1即可。
标签:des 解法 amp span -- 利用 str solution div
原文地址:https://www.cnblogs.com/q1204675546/p/13402956.html