DP

91. Decode Ways

2017-04-09  本文已影响16人  DrunkPian0

为什么我常常对做题产生恐惧,因为可能为了一个不算难的问题不知不觉绕进去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/

这题就先如此。

上一篇下一篇

猜你喜欢

热点阅读