12345678910111213141516171819202122232425262728293031323334 |
- package main
- func numDecodings(s string) int {
- // just like the stair jumping problem,
- // solution cnt = last cnt + last last cnt (under some condition)
- strLen := len(s)
- if strLen == 0 || s[0] == '0' {
- return 0
- } else if strLen == 1 {
- return 1
- }
- solutionCnt := make([]int, strLen)
- solutionCnt[0] = 1
- if s[0] == '1' || (s[0] == '2' && s[1] <= '6') {
- solutionCnt[1] = 1
- }
- if s[1] != '0' {
- solutionCnt[1] += solutionCnt[0]
- }
- for i := 2; i < strLen; i++ {
- if s[i-1] == '1' || (s[i-1] == '2' && s[i] <= '6') {
- solutionCnt[i] += solutionCnt[i-2]
- }
- if s[i] != '0' {
- solutionCnt[i] += solutionCnt[i-1]
- }
- }
- return solutionCnt[strLen-1]
- }
- // func main() {
- // str := "12345120"
- // fmt.Println(numDecodings(str))
- // }
|