面试题45. 把数组排成最小的数

image.png

1 数组排序,递增序列形式
2 Go排序主要就是比较当前两个数的大小 ,我们可以把要比较的两个数字拼接成一个整体, 看看谁大谁小 比如2和8 拼接就28和82。

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. "strings"
  6. )
  7. func minNumber(nums []int) string {
  8. sort.Slice(nums, func(i, j int) bool {
  9. return compareNumber(nums[i],nums[j])
  10. })
  11. var res strings.Builder
  12. for i:=0;i<len(nums);i++{
  13. res.WriteString(fmt.Sprintf("%d",nums[i]))
  14. }
  15. return res.String()
  16. }
  17. func compareNumber(a,b int)bool{
  18. str1 := fmt.Sprintf("%d%d",a,b)
  19. str2 := fmt.Sprintf("%d%d",b,a)
  20. if str1<str2{
  21. return true
  22. }
  23. return false
  24. }
  25. func main() {
  26. fmt.Println(minNumber([]int{8,2}))
  27. fmt.Println(minNumber([]int{22,21}))
  28. fmt.Println(minNumber([]int{2,21}))//212
  29. fmt.Println(minNumber([]int{3,30,34}))
  30. fmt.Println(minNumber([]int{3,30,34,5,9}))
  31. fmt.Println(minNumber([]int{8247,824}))
  32. fmt.Println(minNumber([]int{824,938,1399,5607,6973,5703,9609,4398,8247}))
  33. }