zoukankan      html  css  js  c++  java
  • 剑指offer32-把数组排成最小的数

    题目描述

    输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    思路:

    我一开始的思路是这样的,但是没能实现,考虑到具体实现步骤,难度太大。

    1.先找首位的数最小的数作为第一个数
    2.若是首位数相同,就找第二位最小的数,第二位相等,就找第三位...

    后来忽然翻到别人的答案,就是下面这个答案,感觉醍醐灌顶,真的忍不住要说声谢谢

    思路:

    1,定义一个相加和递增排序的函数(将int型转换成string型,然后判断谁在前谁在后结果会最小)(关键)

    2,将原数组变成string型,根据定义的排序方法进行排序

    3,将排序后的元素连接在一起

    class Solution {
    public:
        string PrintMinNumber(vector<int> numbers) {
            string str;
            int len = numbers.size();
            if(len==0) return str;
            sort(numbers.begin(), numbers.end(), cmp);
            for(int i=0;i<len;i++)
            {
                str = str + to_string(numbers[i]);
            }
            return str;
        }
        //不加static会出错
        static bool cmp(int a, int b)
        {
            string A = to_string(a)+to_string(b);
            string B = to_string(b)+to_string(a);
            return A<B;  //升序,若A>B则为降序
            
        }
    };
  • 相关阅读:
    《SQL Server 2008从入门到精通》--20180628
    2019国赛
    [蓝桥杯2020] 湖北省省赛
    2019第十届蓝桥杯B组决赛题解第五题
    试题 算法提高 分解质因数
    大数相加减
    试题 算法提高 汉诺塔
    试题 算法提高 欧拉函数
    试题 算法提高 天天向上-dp
    算法训练 猴子吃包子-构造
  • 原文地址:https://www.cnblogs.com/loyolh/p/12346938.html
Copyright © 2011-2022 走看看