把数组排成最小的数

来源:互联网 发布:东非解放军 知乎 编辑:程序博客网 时间: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月经期接吻水多怎么办 4岁宝宝晚上尿多怎么办 2岁宝宝晚上尿多怎么办 3岁宝宝晚上尿多怎么办 宝宝拉肚子拉绿色的屎怎么办 婴儿吃奶粉大便干燥怎么办 母乳宝宝不拉大便怎么办 我儿子8岁拉肚子怎么办 1岁宝宝经常便秘怎么办 两个月宝宝拉水怎么办 宝宝吃奶粉上火便秘怎么办 20多天的宝宝便秘怎么办 宝宝五十天消化不良不拉屎怎么办 一周七个月宝宝消化不良拉屎怎么办 孩子总是消化不良拉屎不成型怎么办 一岁宝宝长牙慢怎么办 一岁宝宝不喝水怎么办 七个月的宝宝咳嗽怎么办 怀孕七个月感冒了怎么办 苹果汁弄到白色衣服怎么办 宝宝大便干燥拉不出来怎么办 婴儿吃过青菜米粉呕吐怎么办 50天宝宝便秘5天怎么办 8个月婴幼儿便秘怎么办 1个月婴幼儿便秘怎么办 榨汁后的苹果渣怎么办 宝宝6个月后容易生病怎么办 婴儿头型睡偏了怎么办 6个月婴儿不吃奶怎么办 宝宝秋季腹泻反复发烧怎么办 纯甄过期一个月怎么办 四个月宝宝不吃奶瓶怎么办 四个月宝宝不吃奶粉怎么办 婴儿三四天不大便怎么办 婴儿几天不拉大便怎么办 新生儿6天不拉屎怎么办 孩子10天不大便怎么办 宝宝5天没拉屎怎么办 小孩4-5天不大便怎么办 三个月宝宝睡前哭闹厉害怎么办 新生儿抱着睡放下就醒怎么办