Sunday, March 29, 2015

Number of 1 Bits

Problem:
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.


Sol:
class Solution {
public:
    int hammingWeight(uint32_t n) {
        int count = 0;
        while (n != 0) {
            if ((n & 1) == 1)
                count++;
            n >>= 1;
        }
        return count;
    }
};


== Or ==

public int hammingWeight(int n) {
        int res = 0;
        while (n != 0) {
            res++;
            n = n & (n-1);
        }
        return res;
    }

Largest Number

Prob:
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.


Sol:

class Solution {
public:

    static bool sort_temp(int a, int b) {
        string s1 = to_string(a) + to_string(b);
        string s2 = to_string(b) + to_string(a);
        return s1 < s2;
    }
    
    string largestNumber(vector<int> &num) {
        string sol;
        int size = num.size();
        if (num.size() == 0)
            return sol;
        sort(num.begin(), num.end(), sort_temp);
        if (num[size - 1] == 0)
            return "0";
        for (int i = size - 1; i >= 0; i--) {
            sol.append(to_string(num[i]));
        }
        return sol;
    }
};