算法 顺序表 【剑指offer 45 把数组排成最小的数 改】

71 篇文章 12 订阅
41 篇文章 1 订阅

目录

一、题目

二、思路

三、代码


一、题目

数组里的所有元素可以拆的情况

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 

 

二、思路

一共分为4步:

1.把数组中的数拆成单个

2.剔除0,并记录0的个数

3.排序

4.将0从第二个数开始插入,因为0必定比第二个数要小

【排序思想我采用的bubbleSort。】

 

三、代码

class Solution {
public:
       vector<int> getSingleNumber(int n)
    {
        vector<int> ans;
        
        return ans;
    }
    
    void bubbleSort(vector<int>& v)
    {
        for (int i = 0; i < v.size() - 1; i++)
        {
            bool flag = false;
            for (int j = 0; j < v.size() - 1 - i; j++)
            {
                if (v[j] > v[j + 1])
                {
                    int temp = v[j];
                    v[j] = v[j + 1];
                    v[j + 1] = temp;
                    flag = true;
                }
            }
            if (flag == false)
            {
                return;
            }
        }
    }
    string minNumber(vector<int>& nums) {
        //1.把数组中所有的数拆成单个
        vector<int> single;
        for (int i = 0; i < nums.size(); i++)
        {
            int n = nums[i];
            while (n)
            {
                int cur = n % 10;
                single.push_back(cur);
                n = (n - cur) / 10;
            }
        }
        //2.剔除0,并记录0的个数
        vector<int> exceptZero;
        for (int i = 0; i < single.size(); i++)
        {
            if (single[i] != 0)
            {
                exceptZero.push_back(single[i]);
            }   
        }
        int numberZero = single.size() - exceptZero.size();
        //3.排序
        bubbleSort(exceptZero);
        //4.将0从第二个数开始插入
        string s = "";
        char begin = '0' + exceptZero[0];
        s += begin;
        for (int i = 0; i < numberZero; i++)
        {
            s += '0';
        }
        for (int i = 1; i < exceptZero.size(); i++)
        {
            s += ('0'+exceptZero[i]);
        }
        return s;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值