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.
一维动态规划,从后往前。sum[i]只与sum[i + 1] 和sum[i + 2]相关。PS:可以降低空间复杂度为O(1)。public int numDecodings(String s) { if (s == null || s.length() == 0) { return 0; } int len = s.length(); int[] num = new int[len + 1]; num[len] = 1; char last = s.charAt(len - 1); if (last == '0') { num[len - 1] = 0; } else { num[len - 1] = 1; } for (int i = len - 2; i >=0; i--) { char cur = s.charAt(i); if (cur == '0') { num[i] = 0; } else { String str = s.substring(i, i + 2); int count = Integer.parseInt(str); if (count <= 26) { num[i] = num[i + 1] + num[i + 2]; } else { num[i] = num[i + 1]; } } } return num[0]; }
原文地址:http://blog.csdn.net/u010378705/article/details/28895911