题目链接:https://leetcode.com/problems/decode-ways/
题目:
A message containing letters from A-Z
is being encoded to numbers using the following
mapping:
‘A‘ -> 1 ‘B‘ -> 2 ... ‘Z‘ -> 26
Given 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.
思路:
类似于爬楼梯题目。
算法:
public int numDecodings(String s) { if (s.length() == 0) return 0; char sc[] = s.toCharArray(); if (sc[0] == '0') return 0; int c[] = new int[s.length()]; c[0] = 1; for (int i = 1; i < sc.length; i++) { if ((sc[i - 1] == '2' && sc[i] >= '1' && sc[i] <= '6') || (sc[i - 1] == '1' && sc[i] != '0')) { if (i + 1 < sc.length && sc[i + 1] == '0') { c[i] = c[i - 1]; } else if (i - 2 >= 0) { c[i] = c[i - 1] + c[i - 2];// 类似爬楼梯题 } else { c[i] = c[i - 1] + 1; } } else if (sc[i] == '0' && sc[i - 1] == '0') { return 0; } else if (sc[i] == '0' && sc[i - 1] > '2') { return 0; } else { c[i] = c[i - 1]; } } return c[s.length() - 1]; }
时间: 2024-10-06 10:50:26