您的位置:首页 > 其它

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

2017-07-24 21:54 1401 查看
剑指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转换为sting
for(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐