zoukankan      html  css  js  c++  java
  • [leetcode] 91. 解码方法

    91. 解码方法

    递归+回溯 枚举

    枚举方法只有两种,选当前一个数,还是选取两个数(<=26)。

    dfs状态:dfs(int k, String s)。k表示当前还剩几个数需要选。

    class Solution {
        int ans = 0;
    
        public int numDecodings(String s) {
            ans = 0;
            dfs(s.length(), s);
            return ans;
        }
    
        public void dfs(int k, String s) {
            if (k <= 0) {
                ans++;
                return;
            }
            // 如果当前数为0,此路不通。(上个状态必须拼成10或20)
            if (s.charAt(s.length() - k) == '0') return;
            for (int i = 1; i <= 2; i++) {
                if (i == 1) {
                    dfs(k - 1, s);
                } else if (k > 1) {
                    if (s.charAt(s.length() - k) == '1') {
                        dfs(k - 2, s);
                    } else if (s.charAt(s.length() - k) == '2' &&
                            s.charAt(s.length() - k + 1) >= '0' && s.charAt(s.length() - k + 1) <= '6') {
                        dfs(k - 2, s);
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    Hibernate初学
    表分区
    单列函数
    Oracle基础
    8.28
    SpringMVC
    SpringMVC 初级操作
    试题评测
    Mybatis

  • 原文地址:https://www.cnblogs.com/acbingo/p/9427982.html
Copyright © 2011-2022 走看看