递归

所有字符编码

有一种将字母编码成数字的方式:a->1, b->2, … , z->26。现在给一串数字(数字长度不超过20),请返回所有可能的译码结果,比如:

  • 输入:"11",返回值:"aa"、"k"
  • 输入:"113",返回值:"aac"、"kc"、"am"
func recursive(str string) []string {
	// 递归的终止条件
	if len(str) == 0 {
		return []string{""}
	}

	// 考虑是选择一个字符
	res := make([]string, 0)
	first, _ := strconv.Atoi(str[:1])
	for _, v := range recursive(str[1:]) {
		res = append(res, string(rune('a'+first-1))+v)
	}

	// 选择两个字符
	if len(str) > 1 {
		two, _ := strconv.Atoi(str[:2])
		if two > 0 && two <= 26 {
			for _, v := range recursive(str[2:]) {
				res = append(res, string(rune('a'+two-1))+v)
			}
		}
	}

	return res
}
最后更新于