123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package main
- import (
- "sort"
- "strconv"
- "strings"
- )
- type StringSlice []string
- func (strs StringSlice) Len() int {
- return len(strs)
- }
- func (strs StringSlice) Swap(i, j int) {
- strs[i], strs[j] = strs[j], strs[i]
- }
- func (strs StringSlice) Less(i, j int) bool {
- len1, len2 := len(strs[i]), len(strs[j])
- for k := 0; k < len1 && k < len2; k++ {
- if strs[i][k] != strs[j][k] {
- return strs[i][k] > strs[j][k]
- }
- }
- if len1 < len2 {
- for k := len1; k < len2; k++ {
- if strs[i][0] != strs[j][k] {
- return strs[i][0] > strs[j][k]
- }
- }
- return strs[j][1] > strs[j][0]
- } else if len1 > len2 {
- for k := len2; k < len1; k++ {
- if strs[i][k] != strs[j][0] {
- return strs[i][k] > strs[j][0]
- }
- }
- return strs[i][1] < strs[i][0]
- }
- return false
- }
- func largestNumber(nums []int) string {
- strs := make([]string, 0)
- for _, n := range nums {
- strs = append(strs, strconv.Itoa(n))
- }
- sort.Sort(StringSlice(strs))
- var sb strings.Builder
- for _, s := range strs {
- if sb.Len() == 0 && s == "0" {
- continue
- }
- sb.WriteString(s)
- }
- if sb.Len() == 0 {
- return "0"
- }
- return sb.String()
- }
|