【剑指offer】 把数组排成最小的数(含完整代码与注解)

(笔者第一次写博客,错误难免,还望广大网友多多关照)

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;

}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值