平安科技秋招笔试题:
传入一个只包含1-9的数字字符串,输出的是包含所有数字的最小整数。比如:输入“1992212”,输出129。
实例:
输入
1992212
输出
129
思路:使用关联容器,提取数字。将数字存入vector,再使用剑指offer上的思路,排列组合打印最小数字!
#include<iostream>
#include<string>
#include<vector>
#include <map>
#include<algorithm>
using namespace std;
static bool cmp(int a, int b) {
string A = "";
string B = "";
A += to_string(a);
A += to_string(b);
B += to_string(b);
B += to_string(a);
return A<B;
}
string PrintMinNumber(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end(), cmp);
for (int i = 0; i<numbers.size(); i++) {
answer += to_string(numbers[i]);
//cout << answer << endl;
}
return answer;
}
int main()
{
string s;
getline(cin, s);
map<char, int>m;
for (int i = 0; i < s.length(); i++)
{
m[s[i]]++;
}
vector<int>v;
for (auto j = m.begin(); j != m.end(); j++)
{
//cout << j->first - '0' << endl;
v.push_back(j->first - '0');
}
string tmp = PrintMinNumber(v);
cout << tmp << endl;
system("pause");
return 0;
}