地址 https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: [3,30,34,5,9] 输出: "3033459" 提示: 0 < nums.length <= 100 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
简直是找规律 脑筋急转弯
我开始思考采用字典排序和长度排序结合的办法都会出现特例
最后才发现是 a+b 和b+a 谁小 谁排在前面
class Solution { public: static bool cmp(const string& a,const string& b){ return a+b<b+a; } string minNumber(vector<int>& nums) { vector<string> vv; for(int i =0 ;i < nums.size();i++){ vv.push_back(to_string(nums[i])); } sort(vv.begin(),vv.end(),cmp); string ans; for(int i =0;i < vv.size();i++){ ans += vv[i]; } return ans; } };