专栏首页尾尾部落[剑指offer] 把数组排成最小的数

[剑指offer] 把数组排成最小的数

题目描述

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

解题思路

先将数组转换成字符串数组,然后对字符串数组按照规则排序,最后将排好序的字符串数组拼接出来。 关键就是制定排序规则:

  • 若ab > ba 则 a > b
  • 若ab < ba 则 a < b
  • 若ab = ba 则 a = b

解释说明: a = 21 b = 2 因为 212 < 221, 即 ab < ba ,所以 a < b 所以我们通过对ab和ba比较大小,来判断a在前或者b在前的。

参考代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int len = numbers.length;
        if(len == 0)
            return "";
        if(len == 1)
            return String.valueOf(numbers[0]);
        StringBuffer res = new StringBuffer();
        String [] str = new String[len];
        for(int i=0; i<len; i++)
            str[i] = String.valueOf(numbers[i]);
        Arrays.sort(str, new Comparator<String>(){
            public int compare(String s1, String s2) {
                String c1 = s1 + s2;
                String c2 = s2 + s1;
                return c1.compareTo(c2);
            }
        });
        for(int i=0; i<len; i++)
            res.append(str[i]);
        return res.toString();
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [剑指offer] 左旋转字符串

    汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输...

    尾尾部落
  • [剑指offer] 第一个只出现一次的字符 [剑指offer] 第一个只出现一次的字符

    在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1.

    尾尾部落
  • [LeetCode]Palindrome Number回文

    链接:https://leetcode.com/problems/palindrome-number/#/description 难度:Easy 题目:De...

    尾尾部落
  • HBUOJ 回音排版

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 基础练习 高精度加法

      由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。   定义一个数组A,A[0]用于存储a的个位,A[1]...

    刘开心_1266679
  • 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的...

    _DIY
  • 《数据结构》 定长顺序串常用操作代码集合

    代码来自老师上课使用的ppt或者课本 /*定长顺序串*/ #define MAXLEN 40 typedef struct { char ch[M...

    Steve Wang
  • 【LeetCode02】找出不含重复字符的 最长子串 的长度

    这道题,一开始最直接的想法就是暴力法,直接穷举所有的子串,然后选择无重复的子串中最长的那个。

    Sam Gor
  • 【POJ 1035】Spell checker

      每个单词,如果字典里存在,输出”该单词 is correct“;如果字典里不存在,但是可以通过删除、添加、替换一个字母得到字典里存在的单词,那就输出 “该单...

    饶文津
  • 聊聊claudb的Database

    claudb-1.7.1/src/main/java/com/github/tonivade/claudb/data/Database.java

    codecraft

扫码关注云+社区

领取腾讯云代金券