179.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "sort"
  4. "strconv"
  5. "strings"
  6. )
  7. // StringSlice ...
  8. type StringSlice []string
  9. func (strs StringSlice) Len() int {
  10. return len(strs)
  11. }
  12. func (strs StringSlice) Swap(i, j int) {
  13. strs[i], strs[j] = strs[j], strs[i]
  14. }
  15. func (strs StringSlice) Less(i, j int) bool { // Less is "More"
  16. len1, len2 := len(strs[i]), len(strs[j])
  17. for k := 0; k < len1 && k < len2; k++ {
  18. if strs[i][k] != strs[j][k] {
  19. return strs[i][k] > strs[j][k]
  20. }
  21. }
  22. if len1 < len2 {
  23. for k := len1; k < len2; k++ {
  24. if strs[i][0] != strs[j][k] {
  25. return strs[i][0] > strs[j][k]
  26. }
  27. }
  28. return strs[j][1] > strs[j][0] // Important!
  29. } else if len1 > len2 {
  30. for k := len2; k < len1; k++ {
  31. if strs[i][k] != strs[j][0] {
  32. return strs[i][k] > strs[j][0]
  33. }
  34. }
  35. return strs[i][1] < strs[i][0]
  36. }
  37. return false // strs[i] equals strs[j]
  38. }
  39. func largestNumber(nums []int) string {
  40. strs := make([]string, 0)
  41. for _, n := range nums {
  42. strs = append(strs, strconv.Itoa(n))
  43. }
  44. sort.Sort(StringSlice(strs))
  45. var sb strings.Builder
  46. for _, s := range strs {
  47. if sb.Len() == 0 && s == "0" {
  48. continue // No leading zero
  49. }
  50. sb.WriteString(s)
  51. }
  52. if sb.Len() == 0 {
  53. return "0"
  54. }
  55. return sb.String()
  56. }
  57. // func main() {
  58. // println(largestNumber([]int{
  59. // 12, 121}))
  60. // nums := StringSlice([]string{"8308", "830"})
  61. // println(nums.Less(0, 1))
  62. // println(nums.Less(1, 0))
  63. // println(largestNumber([]int{
  64. // 3, 30, 34, 5, 9}))
  65. // println(largestNumber([]int{
  66. // 824, 938, 1399, 5607, 6973, 5703, 9609, 4398, 8247}))
  67. // answer := largestNumber([]int{
  68. // 9051, 5526, 2264, 5041, 1630, 5906, 6787, 8382, 4662, 4532,
  69. // 6804, 4710, 4542, 2116, 7219, 8701, 8308, 957, 8775, 4822,
  70. // 396, 8995, 8597, 2304, 8902, 830, 8591, 5828, 9642, 7100, 3976,
  71. // 5565, 5490, 1613, 5731, 8052, 8985, 2623, 6325, 3723, 5224,
  72. // 8274, 4787, 6310, 3393, 78, 3288, 7584, 7440, 5752, 351,
  73. // 4555, 7265, 9959, 3866, 9854, 2709, 5817, 7272, 43, 1014,
  74. // 7527, 3946, 4289, 1272, 5213, 710, 1603, 2436, 8823, 5228,
  75. // 2581, 771, 3700, 2109, 5638, 3402, 3910, 871, 5441, 6861,
  76. // 9556, 1089, 4088, 2788, 9632, 6822, 6145, 5137, 236, 683,
  77. // 2869, 9525, 8161, 8374, 2439, 6028, 7813, 6406, 7519})
  78. // correct := "995998549642963295795569525905189958985890288238775871870185978591838283748308830827481618052787813771758475277519744072727265721971071006861683682268046787640663256310614560285906582858175752573156385565552654905441522852245213513750414822478747104662455545424532434289408839763963946391038663723370035134023393328828692788270926232581243924362362304226421162109163016131603127210891014"
  79. // println(answer == correct)
  80. // }