标签:
原题链接在这里:https://leetcode.com/problems/number-of-1-bits/
首先想到像Divide Two Integers用pow一次一次翻倍,然后一个一个减掉就好,但注重方法TLE了。
通过Method 2 学习了一种新的API Integer.toBinaryString(n). 但这种方法基本没什么算法成分。
AC Java:
1 public class Solution { 2 // you need to treat n as an unsigned value 3 public int hammingWeight(int n) { 4 /* 5 //Method 1 6 if(n == 0){ 7 return 0; 8 } 9 int res = 0; 10 int pow; 11 while(n>0){ 12 pow = 1; 13 while(pow+pow<=n){ 14 pow += pow; 15 } 16 n-=pow; 17 res+=1; 18 } 19 return res; 20 */ 21 22 //Method 2 23 int res = 0; 24 String str = Integer.toBinaryString(n); 25 for(int i = 0; i<str.length(); i++){ 26 if(str.charAt(i) == ‘1‘){ 27 res++; 28 } 29 } 30 return res; 31 32 }
Method 3 是通过 n & (n-1)消掉最右侧的一个1.
消掉一个1, 对应的res就加一。
AC Java:
1 public class Solution { 2 // you need to treat n as an unsigned value 3 public int hammingWeight(int n) { 4 //Method 3 5 int res = 0; 6 while(n!=0){ 7 n = n & n-1; 8 res++; 9 } 10 return res; 11 } 12 }
标签:
原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4827842.html