寫好了這篇博文我又想到。在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;
}