LeetCode#91-解码方法
Posted 菜鸡要加油
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode#91-解码方法相关的知识,希望对你有一定的参考价值。
/* 91. 解码方法 一条包含字母 A-Z 的消息通过以下方式进行了编码: \'A\' -> 1 \'B\' -> 2 ... \'Z\' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。 示例 1: 输入: "12" 输出: 2 解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。 示例 2: 输入: "226" 输出: 3 解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。 解题思路:动态规划 一个数字,有多少种 代表比他少一个数字或者少两个数字加起来 f(n)=f(n-1)且n位不为0 + f(n-2)且n-1位和n位组成的数字在[10,26] */ public class p91 { public static int numDecodings(String s) { if(s.length()==0)return 0; if(s.length()==1&&Integer.parseInt(s)>=1)return 1; char arr[]=s.toCharArray(); if(arr[0]==\'0\')return 0;//首字符为0怎么都无法解码 int dp[]=new int[s.length()]; dp[0]=1; String ss= s.substring(0,2); //System.out.println(ss); if(Integer.parseInt(ss)>10&&Integer.parseInt(ss)<=26&&Integer.parseInt(ss)!=20)dp[1]=2; else if(Integer.parseInt(ss)>26&&ss.charAt(1)==\'0\'){ dp[1]=0;//如30 } else dp[1]=1;//如37情况 //System.out.println(dp[1]); //System.out.println("----------"); for(int i=2;i<dp.length;i++){ if(arr[i]!=\'0\'){ dp[i]+=dp[i-1]; } int num=(arr[i-1]-\'0\')*10+(arr[i]-\'0\'); //System.out.println(num); //System.out.println("----------"); if(num>=10&&num<=26){ //System.out.println(num); dp[i]+=dp[i-2]; } } return dp[s.length()-1]; } public static void main(String[] args) { System.out.println(numDecodings("301")); char c=\'7\'; //System.out.println("----------"); //System.out.println((int)c); //System.out.println(c-\'0\'); } }
运行结果:
以上是关于LeetCode#91-解码方法的主要内容,如果未能解决你的问题,请参考以下文章