二進制中1的個數--劍指offer11(java實現)

題目描述

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

解題思路

首先判斷正數形式,若爲正數,則直接轉爲二進制,求1個數;
若爲負數。則先將負號去掉,立一個flag標誌,若flag爲1則將二進制數進行轉爲反碼,再加1
得到的二進制進行求1個數

源碼

public class Solution {
    public int NumberOf1(int n) {
        int res = transform(n);
        return res;
    }
    public int transform(long num){
        //參數num爲輸入的十進制數,參數n爲要轉換的進制
        long array[]=new long[32];
        int location=0;
        int flag = 0;
        if(num < 0)
        {
            num = num *(-1);
            flag = 1;
        }
        while(num!=0){//當輸入的數不爲0時循環執行求餘和賦值
                long remainder=num%2;
                num=num/2;
                array[location]=remainder;//將結果加入到數組中去
                location++;
        }
        while(location <32){
            if(location == 31 &&flag == 1)
                array[location] = 1;
            else
                array[location] = 0;
            location++;
        }
        return show(array,location-1,flag);

    }
    private int show(long[] arr,int n,int flag){
        int num = 0;
        if(flag == 0){
            for(int i=n;i>=0;i--){
                //System.out.print(arr[i]+"");
                if(arr[i] == 1)
                    num++;
            }
        }
        else{
            for(int i=0;i<n;i++)
            {
                if(arr[i] == 1)
                    arr[i] = 0;
                else
                    arr[i] = 1;
            }
            arr[0] = arr[0] + 1;
            for(int i=0;i<n-1;i++){
                if(arr[i] >=2)
                {
                    arr[i] = 0;
                    arr[i+1] = arr[i+1] +1;
                }
            }
            for(int i=n;i>=0;i--){
                if(arr[i] == 1)
                    num++;
        }
    }
    return num;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章