Oferta demostrar la seguridad - 46. Las preguntas cara digital traducidas en cadenas (DP)

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
解释: 122585种不同的翻译,
分别是"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];
    }
};

Aquí Insertar imagen Descripción

Publicados 715 artículos originales · ganado elogios 715 · vistas 210 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/104797475
Recomendado
Clasificación