最强解析面试题:Decode Ways
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:Decode Ways相关的知识,希望对你有一定的参考价值。
最强解析面试题:Decode Ways
文章讲解 “ Decode Ways ” 经典面试题,包含思路及源码,及解惑!
题目
A message containing letters from A-Z is being encoded to numbers using the following mapping:
‘A’ -> 1
‘B’ -> 2
…
‘Z’ -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message “12”, it could be decoded as “AB” (1 2) or “L” (12).
The number of ways decoding “12” is 2.
示例1
Input: s = “12”
Output: 2
Explanation: “12” 可以被解析成 “AB” (1 2) 或者 “L” (12).
示例2
Input: s = “226”
Output: 3
Explanation: “226” 可以被解析成 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6).
示例3
Input: s = “0”
Output: 0
Explanation: 没有字母可以被解析成 0.所以有0种解析方式
思路
动态规划:
dp[] 为前 i 位数的最大组合数;
当第 i 位在 0-9 范围内,其可看作 dp[i-1] 加 0-9 ;
当第 i-1 + i 位在 10-26 范围内,其可看作 dp[i-2] 加 10-26 ;
两种可能,做累加即可
注意:
1、字符比较[各自首位根据 ASCII 比较]时,先保证等长在做比较
2、0 值判断时,1-26 无值,故 return 0;当非 0 时,初始化默认为 1
代码
package main
import
"fmt"
func main ()
s:="226"
slen := len(s)
dp := make([]int,slen+1)
if s[0:1] > "0"
dp[0] = 1
else
fmt.Println(“res:",dp[slen])
return
dp[1] = 1
for i:=2;i<=slen;i++
if s[i-1:i] >= "1" && s[i-1:i] <="9"
dp[i] += dp[i-1]
if s[i-2:i] >= "10" && s[i-2:i] <="26"
dp[i] += dp[i-2]
fmt.Println("res:",dp[slen])
附录
Flink 实时数仓,实时风控,实时推荐…流批一体。
以上是关于最强解析面试题:Decode Ways的主要内容,如果未能解决你的问题,请参考以下文章