/*
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
*/
class Solution {
public:
// 本题思路:
// 要排序,就必须要有个比较规则,这样排序才能成功
// 排序规则:ab < ba 则a<b ab > ba 则a>b ab=ba 则a==b 证明:自反性 对称性 传递性
// 上面证明只能证明排序规则在两个之间有效,那么按照按照此排序规则形成的字符串串接是否一定是最小的还需要证明
// 上面2个证明以后再证
string PrintMinNumber(vector<int> numbers) {
std::string strRet ;
if(numbers.size() == 0) return strRet ;
std::vector<std::string> strVec ;
strVec.reserve(numbers.size()) ;
for(std::size_t i = 0; i < numbers.size(); ++i) {
strVec.push_back(std::to_string(numbers[i])) ;
}
std::sort(strVec.begin(), strVec.end(), compare) ;// compare
for(std::size_t i = 0; i < strVec.size(); ++i) {
strRet += strVec[i] ;
}
return strRet ;
}
static int compare(const std::string& str1, const std::string& str2) {// int compare
return str1 + str2 < str2 + str1 ;
}
};
把数组排成最小的数
最新推荐文章于 2022-03-02 21:40:09 发布