91. Decode Ways

为什么我常常对做题产生恐惧,因为可能为了一个不算难的问题不知不觉绕进去2个小时,这显然是不值得的。这题就是如此。

还要注意,java && 的优先级高于||的优先级,而不是同级。

    public int numDecodings(String s) {         
        if (s.length() == 0 || s.charAt(0) == '0') return 0 ; //0开头直接无法解码
        //s[i-1] has r1 decode ways , s[i-2] has r2 decode ways
        int r1 = 1 ;
        int r2 = 1 ;
      
        for (int i = 1 ; i < s.length() ; i ++){
            //这里是if, if, else,不是if, else if, else
            if (s.charAt(i)== '0'){
              r1 = 0;
            }
            //java && 的优先级高于||的优先级,而不是同级。
            if (s.charAt(i-1) == '1' || s.charAt(i-1) == '2' &&  s.charAt(i)<='6'){
                r1 = r1 + r2 ;
                r2 = r1 - r2 ;
            }
            //新加入的一位>6
            else {
                r2 = r1 ;
            }
        }
        return r1 ;
    }

这代码我是抄https://discuss.leetcode.com/topic/2562/dp-solution-java-for-reference 这里的,代码是很短,总体思路我是懂,但是对于corner case的处理,感觉很玄,因为它在看似不知不觉间处理了很多的test case。

也许我该试着理解一下code ganker的代码,虽然很长。
http://blog.csdn.net/linhuanmars/article/details/24570759/

这题就先如此。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这道题和普通的DP题不太一样,用的是top-down的方法。也就是从n开始,而不是从0开始建表。注意dp[ ]的s...
    沉睡至夏阅读 232评论 0 0
  • 原题 有一个消息包含A-Z通过以下规则编码 现在给你一个加密过后的消息,问有几种解码的方式 样例给你的消息为12,...
    Jason_Yuan阅读 794评论 0 0
  • 这道题,印象深刻,和小白讨论过。方法是DP,关键点是“0”;DP问题,从前往后还是从后往前?(我还是很烂的)一般都...
    沉睡至夏阅读 267评论 0 0
  • LeetCode 91 Decode Ways A message containing letters from...
    ShuiLocked阅读 1,180评论 1 0
  • 设置了深色的输入法果然舒服多了。
    inane2000阅读 134评论 0 0