【LeetCode】位1的個數
阿新 • • 發佈:2018-12-09
編寫一個函式,輸入是一個無符號整數,返回其二進位制表示式中數字位數為 ‘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;
然後將標誌數左移一位,再次求與判斷,知道標誌數溢位。