輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。


寫好了這篇博文我又想到。在java中數字的二進制的表示形式是:

正數是用原碼來表示的

負數是用補碼來表示的

這道題的思路主要是打破自己的慣有的思維,其實我們可以看出10進制的數,我們完全可以當做二進制來使用。

然后在轉換成為二進制的時候,我們可以看到他是用了一個左移的操作,

這個操作比我們傳統的利用對二連除的方法要好的。然后我們用c++的方法進行求解得到的答案就是

class Solution {
public:
int NumberOf1(int n) {
int mark=0;
int index = 1;
while(index!=0){
if((n&index)!=0)
mark++;
index=index<<1;
}
return mark;
}
};

通過java寫出的代碼為

思路為:先將數字轉換為一個string類型的字符串,然后再將這個字符串轉換為數組。然后

對這個數字轉換成的數組進行遍歷。看里面有的1的個數,就可以了。

public class Solution {
public int NumberOf1(int n) {
int number =0;
String string=Integer.toBinaryString(n);
char[]chars=string.toCharArray();
for(char ch:chars){
if(ch=='1')
number++;
}
return number;
}
}

c++和java其實代碼寫的在這道題中是都是適用的。兩者的風格是非常的類似的

最優解public static int NumberOf1(int n)

{ 

int count = 0; while (n != 0) { ++count; n = (n - 1) & n; }

return count;

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM