程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 191 Number of 1 Bits,191bits

191 Number of 1 Bits,191bits

編輯:C++入門知識

191 Number of 1 Bits,191bits


最近想刷一下LeetCode練習一下數據結構算法之類的,先從水題開始吧

題目是這樣的

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

大概就是32位整形數計算其中1的個數也就是漢明碼重,因為最近正在復習C方面的基礎知識,看了一本 C和指針 在操作符那一章裡面有關於位運算的講解,其中就是拿這個題目來講解的,經典果然是經典啊!由此也可以看出,一些大公司的筆試面試題也喜歡從這些經典的書籍裡面找原題或者思路

下面就給出Solution:

 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int ones=0;
 5         for(;n!=0;n>>=1){
 6             if((n&1)!=0){
 7                 ones++;
 8             }
 9         }
10         return ones;
11     }
12 };

簡單來說是一個循環,循環判斷當前的數字中是否還有1

值得說明的是(1)n&1 判斷最低位 如果是0 n>>=1 如果是1 ones加一表示1的位數加一

                  (2)n>>=1 這是一個右移操作,我們來回顧一下移位操作

首先是 左移操作

                    左移操作向左移出n位後尾部空缺位用0補足

其次是 右移操作 

                    右移操作又分為邏輯右移和算術右移兩者是有區別的:邏輯右移與左移操作類似,只是向右移出n位後左邊的空缺位由0補足;算術右移的話右移n位後高位的空缺位需要用符號位補足,如果是負數就補足1如果是正數就補足0

而到底是什麼右移方式是由你的編譯器來決定的

當然這道題還有一點小變動:

 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int ones=0;
 5         for(;n!=0;n>>=1){
 6             if((n%2)!=0){
 7                 ones++;
 8             }
 9         }
10         return ones;
11     }
12 };

    只是將條件判斷改成了(n%2)!=0 效果是相同的都是判斷當前為是否為1

 

  順便吐槽下,java運行有這麼慢?我不信

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved