Description:
Construct minimum number by reordering a given non-negative integer array. Arrange them such that they form the minimum number.
Note:
思想参照剑指offer,重新定义下两个数的比较符号,并对开头为零的情况进行处理。
Code:
bool minString(const int& a, const int & b) {
string s1 = to_string(a) + to_string(b);
string s2 = to_string(b) + to_string(a);
for (int i = 0; i < s1.size(); i++) {
if (s1[i] > s2[i])
return false;
else if (s1[i] < s2[i])
return true;
}
return false;
}
class Solution {
public:
/**
* @param nums n non-negative integer array
* @return a string
*/
string minNumber(vector<int>& nums) {
// Write your code here
string r;
if (nums.empty())
return r;
sort(nums.begin(), nums.end(), minString);
for (int i = 0; i < nums.size(); i++) {
r += to_string(nums[i]);
}
//remove zero
int count = 0;
for (int i = 0; i < r.size(); i++) {
if (r[i] == '0')
count++;
else
break;
}
if (count == r.size())
return "0";
return r.substr(count);
}
};