「leetcode「デコード方法

トピック:

のみ暗号化されたデジタル文字列を含む文字列を与えられた、符号化規則は、以下のように、知られているものとする:暗号化、復号化方法を求めているどのように多くのZ 26、になるまで、暗号化は1であり、B 2は、ように暗号化されます。(例:12--2種[1,2]又は[12]、[5,6]シード56--1)

問題解決のアイデア:

最初の2つの数字と復号されたデジタル文字列の総数は、模索後デコードの総数に関連したその直前の第一および第二の前部の一人一人からです。
例えば:12--2種[1,2]または[12]。
121--1種[1,21]および組成物は、第2のデコード前のビットの総数として、組み合わせることができます。フロント1,1 2の背面で12のプラスになるように一緒に、すなわち、デコーディングを復号するの総数の合計数は、すべての後続の復号モード1プラスに等しい同じである、21になる、と組み合わせることができます21のみ。
121--2種[1,2,1]または[12,1]の組み合わせが、組み合わせることができない、最初の前身を復号するの合計数と同じ。12プラスフロント1,1 2の背面に組み合わせるはなく、一緒に、すなわち、総数デコーダ12の総数は、それが1加算されるすべての復号化方法の後に12に等しく、それを復号化することができます。
:組み合わせることができない場合は、次のような、ある
組成物が27> 26となるため、127,7 2を組み合わせることはできません。最初の前身を復号そう総数が挙げられます。
特別な注意0,0の総数を復号例えば160のような特別な処理、、。

コード:

public int numDecodings(String s) {
		if (s == null || s.length() == 0 || s.charAt(0) == '0')
			return 0;
		int[] dp = new int[s.length()];

		if (s.charAt(0) == '0')// 把dp[0]求出来
			dp[0] = 0;
		else
			dp[0] = 1;

		if (s.length() > 1 && s.charAt(1) == '0' && s.charAt(0) >= '3')// 把dp[1]求出来
			return 0;
		if (s.length() > 1 && s.charAt(0) == '0')
			dp[1] = 0;
		if (s.length() > 1
				&& ((s.charAt(0) == '1' && s.charAt(1) == '0')
						|| (s.charAt(0) == '2' && s.charAt(1) == '0')
						|| (s.charAt(0) == '2' && s.charAt(1) > '6') || s
						.charAt(0) >= '3'))
			dp[1] = 1;
		else if (s.length() > 1)
			dp[1] = 2;

		for (int i = 2; i < s.length(); i++) {
			// 能组合
			if (s.charAt(i - 1) == '1'
					|| (s.charAt(i - 1) == '2' && s.charAt(i) <= '6'))// 能组合且组合在一起
				dp[i] = dp[i - 2];
			if (s.charAt(i) != '0'
					&& (s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && s
							.charAt(i) <= '6')))// 能组合但不组合在一起
				dp[i] += dp[i - 1];

			// 不能组合
			if (s.charAt(i) == '0'
					&& !(s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && s
							.charAt(i) <= '6')))
				return 0;
			if (s.charAt(i) != '0'
					&& !(s.charAt(i - 1) == '1' || (s.charAt(i - 1) == '2' && s
							.charAt(i) <= '6')))
				dp[i] = dp[i - 1];
		}
		return dp[s.length() - 1];
	}

おすすめ

転載: blog.csdn.net/weixin_44997483/article/details/90218444