把数组排成最小的数
来源:互联网 发布:东非解放军 知乎 编辑:程序博客网 时间:2024/04/25 17:03
题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路就是定义一种比较运算,如3>32,就是位数如果不够就用最后一位去填充,一直比较完每一位为止。然后就是将vector里所有的元素按照这个大小顺序重新排列一次,依次输入stringstream,最后将每一个数字输出。
class Solution {public:string PrintMinNumber(vector<int> numbers){int flag = 1;stringstream ss;string sort;int i = 0, j = 0;int size = numbers.size();// 52, 32, 34, 25, 2// 3,32,321for (i = 0; i < size; i++)for (j = size - 1; j > i; j--){flag = Cmp(numbers[j], numbers[j - 1]);if (flag)swap(numbers[j], numbers[j - 1]);}for (int i = 0; i < size; i++)ss << numbers[i];ss >> sort;return sort;}void decode(int n, int de[]){int bi = 0;int not0 = 0;int base = 10;int i = 0;int n0 = n;while (n){bi++;n = n / 10;}base = 10;while (n0){de[bi-1] = n0 % 10;n0 = n0 / 10;bi--;}i = 9;while (i >= 0){if (de[i] > 0){not0 = de[i];break;}i--;}i = 0;while (i <= 9){if (de[i] == 0)de[i] = not0;i++;}}int Cmp(int n1, int n2){int tmp1[10] = { 0 }; int tmp2[10] = { 0 };decode(n1, tmp1);decode(n2, tmp2);int i;for (i = 0; i < 10; i++)if (tmp1[i] < tmp2[i])return 1;else if (tmp1[i] > tmp2[i])return 0;return 0;} };
0 0
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数--总结
- 把数组排成最小的数--总结
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- 把数组排成最小的数
- Leetcode 36 Valid Sudoku 数独的合法性判断
- Java 线程面试题
- foreach语句
- 携程基于Storm的实时大数据平台实践
- Java开发的必备技术点
- 把数组排成最小的数
- MySQL运行状态show status详解
- 35. Search Insert Position
- Android笔记之利用TouchDelegate扩大View点击区域
- LeetCode—394. Decode String
- matlab 子系统重用,精简自动代码
- Swift基础之实现一个镂空图片的小Demo
- 射频电路LC等效的微带线
- UVALive 4015 树形dp