Review an answer - Decode Ways

前端 未结 7 1250
隐瞒了意图╮
隐瞒了意图╮ 2021-01-31 19:36

I\'m trying to solve a question and my question here is why doesn\'t my solution work?. Here\'s the question and below\'s the answer.

Question taken fr

7条回答
  •  梦如初夏
    2021-01-31 20:17

    So here is some what simpler way out for your problem. This is pretty close to calculating Fibonacci, with the difference that there are condition checks on each smaller size subproblem. The space complexity is O(1) and time is O(n)

    The code is in C++.

       int numDecodings(string s)
       {
        if( s.length() == 0 ) return 0;
    
    
        int j  = 0;
        int p1 = (s[j] != '0' ? 1 : 0);         // one step prev form j=1
        int p2 = 1;                             // two step prev from j=1, empty
        int p = p1;
    
        for( int j = 1; j < s.length(); j++ )
        {
            p = 0;
    
            if( s[j] != '0' ) 
                p += p1;    
    
    
            if( isValidTwo(s, j-1, j) )
                p += p2;
    
            if( p==0 )                  // no further decoding necessary, 
                break;                  // as the prefix 0--j is has no possible decoding.
    
            p2 = p1;                    // update prev for next j+1;
            p1 = p;
    
        }
    
        return p;
        }
    
        bool isValidTwo(string &s, int i, int j)
        {
            int val= 10*(s[i]-'0')+s[j]-'0';
    
            if ( val <= 9 ) 
            return false;
    
            if ( val > 26 ) 
            return false;
    
            return true;
    
        }
    

提交回复
热议问题