1. 程式人生 > >【LeetCode】位1的個數

【LeetCode】位1的個數

編寫一個函式,輸入是一個無符號整數,返回其二進位制表示式中數字位數為 ‘1’ 的個數(也被稱為漢明重量)。

示例 :

輸入: 11
輸出: 3
解釋: 整數 11 的二進位制表示為 00000000000000000000000000001011

示例 2:

輸入: 128
輸出: 1
解釋: 整數 128 的二進位制表示為 00000000000000000000000010000000

import java.util.*;

public class Main {

    public static void main(String[] args)
    {

        Scanner sc=new Scanner(System.in);

        int n=sc.nextInt();

        System.out.println(Solution.hammingWeight(n));

    }

}


class Solution
{ 
    public static int hammingWeight(int n)
    {
        int flag = 1;            //定義一個標誌數1
        int count = 0;           //計數器
        while (flag != 0)        //當標誌數沒有溢位(位1在32位範圍內)時迴圈
        {
            if((flag & n) != 0)   //如果標誌數與n求與結果不為0,則說明當前位為1
            {
                count++;           //計數器加一
            }
            flag = flag<<1;        //標誌位左移
        }
        return count;        
    }
}

思路:定義一個一開始為1的標誌數,與原數求與運算,結果為0則說明原數的當前位為0,結果不為0這說明當前位為1;

然後將標誌數左移一位,再次求與判斷,知道標誌數溢位。