package main import ( "fmt" ) var c = []string{"ABC", "DEF", "GHI", "JKL", "MNO", "PQR", "STU", "VWX", "YZ"} var total = []int{3, 3, 3, 3, 3, 3, 3, 3, 2} //求所有电话号码对应的单词 func number_to_charset(numbers []int, answer []int) { len1 := len(numbers) for { for i := 0; i < len1; i++ { fmt.Printf("%s", string(c[numbers[i]-1][answer[i]])) } fmt.Printf("\n") k := len1 - 1 //探索与回溯 //总是从最后一位改起(如AWA AWB AWC),回溯的时候只改变一位(AXA AXB AXC) for k >= 0 { if answer[k] < total[numbers[k]-1]-1 { answer[k]++ break } else { answer[k] = 0 k-- } } if k < 0 { break } } } func main() { answer := make([]int, 9) numbers := []int{2, 9, 2} number_to_charset(numbers, answer) }
输出结果:
DYD DYE DYF DZD DZE DZF EYD EYE EYF EZD EZE EZF FYD FYE FYF FZD FZE FZF