NOTE

把数组排成最小的数

记录《剑指 Offer》“把数组排成最小的数”的原始解题笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

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

2. 思路

  • 自定义排序字符串

3. 实现

package main

import (
	"sort"
	"strconv"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * @param numbers int整型一维数组
 * @return string字符串
 */
//时间复杂度:O(NlogN), 采用了排序
//空间复杂度:O(1)
func PrintMinNumber(numbers []int) string {
	sort.Slice(numbers, func(i, j int) bool {
		a, b := strconv.Itoa(numbers[i]), strconv.Itoa(numbers[j])
		return a+b < b+a
	})
	res := ""
	for _, number := range numbers {
		res += strconv.Itoa(number)
	}
	return res
}
func minNumber(nums []int) string {
    strs := make([]string, 0 , len(nums))
    for _, num := range nums {
        str := strconv.Itoa(num)
        strs = append(strs, str)
    }
    sort.Slice(strs, func(i,j int) bool {
        a := strs[i]+ strs[j]
        b := strs[j]+ strs[i]
        return a < b 
    })
    res := ""
    for _, str := range strs{
        res += str
    }
    return res
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看