class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
       sort(numbers.begin(),numbers.end(),[](const auto &a,const auto &b)
            {
                vector<int> anum;
                vector<int> bnum;
                int numa=a,numb=b;
                while(numa)
                {
                    anum.push_back(numa%10);//按位数从小到大排序
                    numa/=10;
                }
                //reverse(anum.begin(), anum.end());//按位数高到低排序
                while(numb)
                {
                    bnum.push_back(numb%10);//按位数从小到大排序
                    numb/=10;
                }
                //reverse(bnum.begin(), bnum.end());//按位数高到低排序
                int i=anum.size()-1,j=bnum.size()-1;
                while(i>=0 && j>=0)
                {
                    if(anum[i]!=bnum[j])
                    {
                        return anum[i]<bnum[j];
                    }
                    i--;
                    j--;
                }//这一部分没问题
                //关键在于后面部分,比如3和3334作比较 a,b比较
                //对于左边a,当低位i的值小于高位i+1的值,不用调换,因此anum[i]<anum[i+1]为判断条件
                if(a>b)
                {
                    while(i>=0)//i从小位到大排序
                    {
                        if(anum[i]!=anum[i+1])
                        {
                            return anum[i]<anum[i+1];
                        }
                        i--;
                    }
                }
                //对于左边b,当低位i的值大于高位i+1的值,不用调换。因此bnum[j]>bnum[j+1]为判断条件
                if(a<b)
                {
                    while(j>=0)
                    {
                        if(bnum[j]!=bnum[j+1])
                        {
                            return bnum[j]>bnum[j+1];
                        }
                        j--;
                    }
                }

                return a<b;
            });
        string ans="";
        for(auto &num:numbers)
        {
            ans+= to_string(num);
        }

        return ans;
    }
};