1. Tema
Dada una digital, seguimos las siguientes reglas para la conversión de una cadena:
0 traduce en "A",
1 traducirse en "B", ......,.
11 se tradujo en "L", ......,.
25 se tradujo en "z".
Puede haber más de una traducción digital. Por favor, programar la función de cómo muchos métodos diferentes para calcular un número tiene traducción.
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,
分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 2^31
Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
propiedad de la deducción de todas las redes. reimpresión comercial póngase en contacto con la reimpresión autorizada oficial, no comercial por favor indique la fuente.
2. Resolución de Problemas
- La programación dinámica, similar al número de Fibonacci
- dp [i] representa el número de programas en la traducción i caracteres
- dp [0] Número de cadena vacía Esquema 1
- dp [1] El primer dígito es sólo un tipo de traducción
str[i-2]=='1' ||(str[i-2]=='2' && str[i-1] <='5')
, Los personajes pueden traducir Dos 2, también se pueden combinar- Los casos restantes, sólo pueden ser traducidos en una sola
class Solution {
public:
int translateNum(int num) {
string str = to_string(num);
int i, n = str.size();
int dp[n+1] = {0};
dp[0] = 1;//第0个字符空串
dp[1] = 1;//第一个字符翻译,只有1种可能
for(i = 2; i <= n; ++i)
{
if(str[i-2]=='1' ||(str[i-2]=='2' && str[i-1] <='5'))
//该种情况,可以把这两位数,翻成1个或者2个字符
dp[i] = dp[i-2]+dp[i-1];
else//34,29,只能单独翻译
dp[i] = dp[i-1];
}
return dp[n];
}
};