首页 > 代码库 > [leetcode]Decode Ways
[leetcode]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‘ -> 26Given 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:递归。典型的递归算法,不用试就知道会超时。
思路2:dp。既然递归超时,那就不妨试试dp了。
维护一个一维数组,dp[length]。dp[i]表示字符串 i ~ length的decode ways。
初始状态:dp[length] = 0; dp[length - 1] = dp[length - 1] = s.charAt(length - 1) == ‘0‘ ? 0 : 1;
每次读取num = s.substring(i,i + 2)
如果大于26,则dp[i] = dp[i + 1];
如果小于等于26,则dp[i] = dp[i + 1] + dp[i + 2];
【注意】0的处理,第一遍未通过case“0”,"01","101"
1 public class Solution { 2 public int numDecodings(String s) { 3 if(s.length() == 0) return 0; 4 int length = s.length(); 5 int[] dp = new int[length + 1]; 6 dp[length] = 1; 7 dp[length - 1] = s.charAt(length - 1) == ‘0‘ ? 0 : 1; 8 for(int i = length - 2; i >= 0; i--){ 9 if(s.charAt(i) == ‘0‘) continue;10 int tem = Integer.valueOf(s.substring(i,i + 2));11 if(tem > 26){12 dp[i] = dp[i + 1];13 }else{14 dp[i] = dp[i + 1] + dp[i + 2];15 }16 }17 return dp[0];18 }19 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。