码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode Number of 1 Bits

时间:2015-09-22 06:39:21      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

原题链接在这里: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 }

 

LeetCode Number of 1 Bits

标签:

原文地址:http://www.cnblogs.com/Dylan-Java-NYC/p/4827842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!