| 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))
 
- // }
 
 
  |