200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 输入一个正整数数组 输入一个正整数数组 把数 打印能拼接出的所有数字中最小的一个

输入一个正整数数组 输入一个正整数数组 把数 打印能拼接出的所有数字中最小的一个

时间:2020-10-01 10:38:22

相关推荐

输入一个正整数数组 输入一个正整数数组 把数 打印能拼接出的所有数字中最小的一个

剑指offer:输入一个正整数数组,输入一个正整数数组,把数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

思路:两个数比较,哪个更适合放在前面,可以将两个数拼起来,谁放在前面,拼起来的数小,谁就更适合放在前面。

关键是要会用,stringstream做int和string的转换,还要会用sort排序。

代码如下:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <vector>#include <sstream>#include <functional>#include <algorithm>using namespace std;bool less_second(const string &s1,const string &s2){string str1 = s1 + s2;string str2 = s2 + s1;return str1 < str2;}class Solution {public:string PrintMinNumber(vector<int> numbers) {int length = numbers.size();string result;if(length <= 0)return result;vector<string> strVec;//利用stringstream将int转换为stingfor(int i = 0; i < length; i++){stringstream ss;string str;ss << numbers.at(i);ss >> str;strVec.push_back(str);}sort(strVec.begin(),strVec.end(),less_second);//排序函数,第三个参数默认是less,但是可以自己指定函数指针for(int i = 0; i < length; i++){result += strVec.at(i);}return result;}};int main(){int a[] = {32,3,321};vector<int> myVec(&a[0],&a[3]);vector<string> strVec;Solution s;string result = s.PrintMinNumber(myVec);return 0;}

输入一个正整数数组 输入一个正整数数组 把数 打印能拼接出的所有数字中最小的一个。例如输入数组{3 32 321} 则打印出这三个数字能排成的最小数字为321323。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。