(笔者第一次写博客,错误难免,还望广大网友多多关照)
1 预备知识
1.1 sort函数
用于C++中,对给定区间所有元素进行排序,头文件是#include<algorithm>
Sort函数使用模板: Sort(start,end,排序方法)
三个参数的用法:
(1)第一个是要排序的数组的起始地址;
(2)第二个是结束的地址(最后一位要排序的地址的下一地址);
(3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
从小到大的排序还可以用下列方法:
bool complare(int a,int b)
{
return a<b;
}
实现从大到小的排序怎么办?
bool complare(int a,int b)
{
return a>b;
}
1.2 to_string函数
std命令空间下有一个C++标准库函数std::to_string(),可用于将数值类型转换为string(字符串)类型, 头文件<string>
to_string 使用模板: to_string()
2 题目与完整算法
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
完整算法和注解:
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
usingnamespace std;
bool compare(int a, int b);
classSolution {
public:
string PrintMinNumber(vector<int> numbers) {
int len = numbers.size(); //vector的基本用法
if (len == 0) //特殊情况判断,增强鲁棒性
return"";
string str;
sort(numbers.begin(), numbers.end(), compare);//调用compare,执行完sort后,数组中已为从小到大排列
for (int i = 0; i<len; i++)
{
str = str + to_string(numbers[i]);//转化为字符串,利用字符串将数组各元素连接起来
}
return str;
}
};
bool compare(inta, intb)//两两比较大小,将小数放前面,大数放后面
{
string A = to_string(a) + to_string(b);
string B = to_string(b) + to_string(a);
return A<B;
}
int main()
{
Solution s;
vector<int> num = {3,32,321};
string str = s.PrintMinNumber(num);
cout << str << endl;
getchar();
return 0;
}
运行结果: