1. 程式人生 > >劍指offer____把陣列排成最小的數

劍指offer____把陣列排成最小的數

輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{3,32,321},則打印出這三個數字能排成的最小數字為321323。  

class Solution {
public:
   bool sort(char * str1, char *str2)
{
    if (strcmp(str1, str2) >= 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
string PrintMinNumber(vector<int> arr)
{
    int len = arr.size();
    char str1[32] = { 0 };
    char str2[32] = { 0 };
    int min = 0;
    for (int i = 0; i<len - 1; ++i)
    {
        min = i;
        for (int j = i + 1; j<len; ++j)
        {
            sprintf(str1, "%d", arr[min]);
            sprintf(str2, "%d", arr[j]);
            char *pre = strcat(str1, str2);
            char *last = strcat(str2, str1);
            if (!sort(pre, last))
            {
                min = j;
            }
        }
        if (min != i)
        {
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }
    string result;
    char temp[32] = { 0 };
    for (int i = len - 1; i >= 0; i--)
    {
        sprintf(temp, "%d", arr[i]);
        result.append(temp);
    }
    return result;
}
};