摘要:問題描述輸入一個整數,輸出該數二進制表示中的個數。其中負數用補碼表示。思路方法將二進制變成字符數組,遍歷數組統計的個數,這種辦法不需要考慮正負數。遍歷字符數組,統計的個數判斷該位是否是,如果是就,否則執行下一次循環。的二進制表示想右移一位。
1.問題描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。
2.思路方法1:將二進制變成字符數組,遍歷數組統計1的個數,這種辦法不需要考慮正負數。
1 public class Solution { 2 public int NumberOf1(int n) { 3 String s = Integer.toBinaryString(n);//將n變成二進制之后變成字符串 4 char[] num = s.toCharArray();//將字符串變成字符數組 5 int count = 0;//定義一個變量,用來計數,統計1的個數。 6 for(int i = 0; i < num.length; i++){//遍歷字符數組,統計1的個數 7 if(num[i] == "1"){//判斷該位是否是1,如果是1,count就++,否則執行下一次循環。 8 count++; 9 } 10 } 11 return count;//返回1的個數。 12 } 13 }
方法2:一種很巧妙的辦法——n&(n-1)
解釋一下:n-1之后,就把二進制表示種的從右開始的第一個1變成了0,同時把第一個1右邊的0變成了1.例如1100,減1之后就是1011,再和1100(也就是n)進行&運算結果就是1000,然后將結果賦值給n,把最右邊的1變成了0,這樣循環,直到n變成0停止,循環過程統計1出現的次數即可。
1 public class Solution { 2 public int NumberOf1(int n) { 3 int count = 0;//定義計數器變量 4 while(n != 0){//n不等于0就循環 5 count++;//n不為0,那么n的二進制表示中就必有1,所以count++. 6 n = n&(n-1);//這個過程就是把n的二進制表示的最右邊的1變成0,其他位不變,然后再賦值給n。 7 } 8 return count;//返回計數器的的結果。 9 } 10 }
方法3:無符號右移
思路就是把整數n變成二進制表示后逐個判斷最低位是否是1,如果是1就讓計數器加1,然后進行無符號右移1位,如果不是1,就直接右移1位,直到傳入的整數n變成0停止。
(因為無符號位移不管最高位是0還是1,右移之后都用0補齊,所以不需要考慮正負數的問題)
1 public class Solution { 2 public int NumberOf1(int n) { 3 int count = 0;//計數器 4 while(n!=0){//n不為0才執行循環 5 count+=n&1;//這里很巧妙,n&1,用來判斷最后以為是不是1,如果是1,執行前面count+=1;如果不是1,那么n&1的結果就是0,count就不變。 6 n = n>>>1;//n的二進制表示想右移一位。 7 } 8 return count;//返回結果。 9 } 10 }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75422.html
摘要:圖解第二種算法圖解代碼示例算法如果為真,說明拿到的是二進制序列的個數為算法為的時候說明已經拿完了,循環終止二進制序列中的個數以上代碼,還可做優化在此僅作參考,若有更好的算法,還望能夠私信告知,多謝各位。 ?前言?: 算法是一個程序員的內功,能很好的體現程序員的編程思維,通過學習和掌握常見的算...
摘要:題目輸入一個整數,輸出該數二進制表示中的個數。其中負數用補碼表示。二進制與運算符符號為,表示若兩個二進制位都為,則結果為,否則為。所以用于比較的這個數字初始值為,比較完后讓左移位,這樣就可以依次比較所有位是否為。 題目 輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。 分析 這是一道考察二進制的題目 二進制或運算符(or):符號為|,表示若兩個二進制位都為0,則結果為0...
摘要:劍指系列刷題第一篇題目來源數組中數字出現的次數大家可以去測試一下自己的代碼博主碼云鏈接文章目錄前言題目描述解題思路解題代碼前言這是劍指系列刷題第一篇文章,大家可以互相學習一下。其中的兩個單身狗是和。 ...
摘要:導航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結劍指從尾到頭打印鏈表題目詳情輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值用數組返回。時間復雜度方法先反轉鏈表并求長度,在將反轉后的鏈表數據拷貝至數組中。 ...
閱讀 1881·2021-11-25 09:43
閱讀 3174·2021-11-15 11:38
閱讀 2715·2019-08-30 13:04
閱讀 491·2019-08-29 11:07
閱讀 1502·2019-08-26 18:37
閱讀 2738·2019-08-26 14:07
閱讀 591·2019-08-26 13:52
閱讀 2285·2019-08-26 12:09