class Solution {
public:
    int maximumGap(vector<int>& nums) {
        if(nums.size()<2)
            return 0;
        vector<vector<int> > preBucket(10);
        vector<vector<int> > curBucket(10);
        vector<int> curNums;

        for(int i=0; i<32; i++){
            curNums.clear();
            if(i==0)
                curNums=nums;
            else{
                for(int j=0; j<10; j++){
                    for(int k=0; k<preBucket[j].size(); k++)
                        curNums.push_back(preBucket[j][k]);
                }
            }

            for(int j=0; j<curNums.size(); j++){
                int d = (curNums[j]/int(pow(10, i)))%10;
                curBucket[d].push_back(curNums[j]);
            }
            preBucket=curBucket;
            curBucket.clear();
            curBucket.resize(10);
        }

        int res=0;
        for(int j=1; j<curNums.size(); j++)
            res=max(res, curNums[j]-curNums[j-1]);

        return res;
    }
};