问题: 输入一个数N,打印出1到N的全排列
比如输入数字是 3
思路
想象成老虎机上的N个格子,每个格子都是在进行1-N的循环,并且不能重复。
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
| package main
import "fmt"
var ( num int bucket []int // 格子 flag []int // 用来记录1-N的数字是否已经使用,防止重复出现 )
func fill_bucket(n int) { if n > num { //当所有格子都填满,打印一次 pretty_print(bucket) return }
for i := 1; i <= num; i++ { if flag[i] == 1 { continue } bucket[n] = i flag[i] = 1 fill_bucket(n + 1) flag[i] = 0 } }
func pretty_print(bucket []int) { for _, s := range bucket { if s != 0 { fmt.Print(s) } } fmt.Println() }
func main() { fmt.Println("please input a number") fmt.Scanf("%d", &num) bucket = make([]int, num+1) // 用不到第0个元素 flag = make([]int, num+1) // 用不到第0个元素 fill_bucket(1) // 从左到右遍历 }
|