劍指offer____把陣列排成最小的數
阿新 • • 發佈:2018-12-20
輸入一個正整數陣列,把數組裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。例如輸入陣列{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; } };