数を並び替えた最大値(Go言語)
正の整数のリストを与えられたとき、数を並び替えて可能な最大数を返す関数を記述せよ。例えば、[50, 2, 1, 9]が与えられた時、95021が答えとなる。
1時間以内に解けなければプログラマ失格となってしまう5つの問題が話題に | ソフトアンテナブログ
ここで Ruby で解いたものを、Go でもやってみました。
problem1.go
package main import "fmt" import "strconv" func remove(ar []int, i int) []int { tmp := make([]int, len(ar)) copy(tmp, ar) return append(tmp[0:i], tmp[i + 1:]...) } func permutation(ar []int) [][]int { var result [][]int if len(ar) == 1 {return append(result, ar)} for i, a := range ar { for _, b := range permutation(remove(ar, i)) { result = append(result, append([]int{a}, b...)) } } return result } func join(ar []int) (st string) { for _, n := range ar { st += strconv.Itoa(n) } return } func solve(ar []int) int { max := 0 for _, a := range permutation(ar) { n, _ := strconv.Atoi(join(a)) if n > max {max = n} } return max } func main() { fmt.Println(solve([]int{50, 2, 1, 9})) //=>95021 }