数を並び替えた最大値(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
}