当前位置: 首页 > 后端技术 > Java

LeetCode-091-DecodingMethod

时间:2023-04-01 21:52:34 Java

DecodingMethodTitle描述:包含字母A-Z的消息通过以下映射编码:'A'->1'B'->2...'Z'->26为decodedEncodedmessages,所有的数字都要按照上面的映射方式反向映射回字母(可以有多种方式)。例如“11106”可以映射为:“AAJF”,将消息分组为(11106)“KJF”,将消息分组为(11106)注意不能将消息分组为(11106)因为“06”不能映射到“F”,因为“6”和“06”在映射中不等价。给定一个仅包含数字的非空字符串s,计算并返回解码方法的总数。问题数据保证答案必须是32位整数。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:递归穷尽首先,当s为null或空字符串或s为0开头的字符串时,无法映射成功,直接返回0。如果s的长度为1,直接返回1。然后就是当s的长度大于1时递归处理,递归方法处理逻辑如下(方法的输入参数left和right分别为当前待匹配字符的起始位置和结束位置0<(right-left)<3):如果左边位置的数字为0,即要匹配的字符以0开头,则无法映射直接返回;如果左右匹配的字符数大于26,则无法映射返回;如果right是s的最后一位,则将结果加1并返回;若right为s的倒数第二位,且最后一位不为0,则result加1返回;然后根据right+2case后的位数继续递归处理right~right+1和right~right。最后返回的结果是解码方法的总数。publicclassLeetCode_091{privatestaticintresult=0;/***递归耗尽:性能差,提交会超时**@params*@return*/publicstaticintnumDecodings(Strings){//这些情况无法映射,直接返回0if(s==null||s==""||s.equals("0")||s.startsWith("0")){返回0;}if(s.length()==1){返回1;}numDecodings(s,0,1);numDecodings(s,0,2);返回结果;}publicstaticvoidnumDecodings(Strings,intleft,intright){if(s.charAt(left)=='0'){返回;}if(Integer.valueOf(s.substring(left,right))>26){返回;}if(s.length()-right==0){result++;返回;}if(s.length()-right==1&&s.charAt(s.length()-1)!='0'){result++;返回;}numDecodings(s,right,right+1);如果(s。长度()-right>1){numDecodings(s,right,right+2);}}publicstaticvoidmain(String[]args){System.out.println(numDecodings("226"));}}【每日留言】与天斗,其乐无穷!与地球斗争很有趣!和别人打架很有趣!