2021-02-17:規定1和A對應、2和B對應、3和C對應...26和Z對應,那麼一個數字字符串好比"111」就能夠轉化爲:"AAA"、"KA"和"AK"。給定一個只有數字字符組成的字符串str,請問有多少種轉化結果?java
福哥答案2021-02-17:git
天然智慧便可。
1.遞歸。有代碼。
2.動態規劃。有代碼。github
代碼用golang編寫,代碼以下:golang
package main import "fmt" func main() { str := "7210231231232031203123" fmt.Println("1.遞歸:", number1(str)) fmt.Println("2.動態規劃:", number2(str)) } func number1(str string) int { if len(str) == 0 { return 0 } return process1(str, 0) } func process1(str string, index int) int { strLen := len(str) if strLen == index { //1 return 1 } if str[index] == '0' { return 0 } ret := process1(str, index+1) if index+1 < strLen && (str[index] == '1' || (str[index] == '2' && str[index+1] <= '6')) { ret += process1(str, index+2) } return ret } func number2(str string) int { strLen := len(str) if strLen == 0 { return 0 } dp := make([]int, strLen+1) dp[strLen] = 1 //1 for i := strLen - 1; i >= 0; i-- { if str[i] == '0' { continue } dp[i] = dp[i+1] if i+1 < strLen && (str[i] == '1' || (str[i] == '2' && str[i+1] <= '6')) { dp[i] += dp[i+2] } } return dp[0] }
執行結果以下:spa