1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| func largestNumber(nums []int) string { var arr array = nums sort.Sort(arr) var buf bytes.Buffer for _, v := range arr { buf.WriteString(strconv.Itoa(v)) } if zeroOnly(buf.String()) { return "0" } else { return buf.String() } }
type array []int
func (a array) Len() int { return len(a) }
func (a array) Less(i, j int) bool { x := strconv.Itoa(a[i]) y := strconv.Itoa(a[j]) for i := 0; i < len(x)+len(y); i++ { if x[i%len(x)] < y[i%len(y)] { return false } else if x[i%len(x)] == y[i%len(y)] { continue } else { return true } } return true }
func max(x, y int) int { if x > y { return x } return y }
func (a array) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func zeroOnly(s string) bool { for _, v := range s { if v != '0' { return false } } return true }
|