将数组排成最小的值的方法与详解

目录

一.题目描述

二.问题分析

1.举例

2.解决步骤

三.代码实现


一.题目描述

输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个(结果以字符串的形式进行返回)。

二.问题分析

1.举例

int[] arr = {3,30,34,5,9};

以上面这个整型数组为例来进行分析,最终排成的结果为“3033459”.

2.解决步骤

(1)首先需要将整型数组转化为字符数组

(2)然后按照指定的排序规则进行排序

(3)最终将排序好的字符数组进行拼接

其中使用到了将整型数字转化为字符的方法:valueOf();

这里对于排序的规则为:如果 strs[i]+strs[i+1] > strs[i+1]+strs[i] 就进行交换;

随便使用任意一种排序方法按照当前规则进行排序;

最后使用StringBuilder或者StringBuffer将字符数组进行拼接,最终为有序的字符串。

三.代码实现

这里排序为了简单。我使用了Arrays中的sort函数,然后指定上面的规则进行排序

代码:

class Solution {
    public String minNumber(int[] nums) {
        String[] strs = new String[nums.length];
        //将整型数组转化为字符串数组
        for(int i = 0; i<nums.length; i++){
            strs[i] = String.valueOf(nums[i]);
        }
        //然后按照指定的规则进行排序(这里使用java内部的排序函数)
        //这里使用了lambda表达式来指定排序规则
        Arrays.sort(strs, (num1, num2) -> (num1+num2).compareTo(num2+num1));
        //将排好序的数组转化为字符串并返回
        StringBuilder sb = new StringBuilder();
         for(String s:strs){
             sb.append(s);
         }
         return sb.toString();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值