题目描述
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字,返回有多少种可能的译码结果
示例1
输入
复制
"12"
输出
复制
2
说明
2种可能的译码结果(”ab” 或”l”)
思路:
对于一个字符,分析其能否单独翻译成一个单词,以及能否组合翻译成一个单词
特别的: 对于含有0的数字,其只能够与前面的1或2组合成 “10” 或 “20”
易错点:对于多个连续0 将无法翻译 对于 “210” 其只能翻译成 “2” “10”
基本做法:
设置bool can[]数组 标记出只能组合的数字为false 即 遇到0时,判断前面是否为1 或 2
将这连续的两个位置标记为 can[i-1]=false can[i]=false
采用dfs 统计总数,
①对于num[i] 若其为can[i]=true 那么可以单独翻译=》dfs(depth+1)
进一步分析其能否与后面一个组合翻译(i+1<n 并且 can[i+1]==true 并且位于 10至26之间 ) =》 dfs(depth+2)
②对于num[i] 其can[i]=false 说明只能组合翻译(“10” “20