91. 디코딩 방법

4390 단어
제목:
https://leetcode-cn.com/problems/decode-ways/
디코딩 방법
  • 예: "121013271"

  • 상태 방정식


  • (1) S[i]=0
    ① 만약에 (S[i-1]==1||S[i-1]==2), dp[i]=dp[i-2]
    “110”->”1,2,1”
    ② 그렇지 않으면 0으로 돌아간다
    (2) 만약에 (S[i-1]==2) & & (s[i]<=6)이면 dp[i]=dp[i-1]+dp[i-2]
    (3) 만약에 S[i-1]=1이 S[i]가 얼마든지 상관없이 dp[i]=dp[i-1]+dp[i-2]

        3.경계


    (1) Dp[0]=1,dp[-1]=1

      4. 절차.

    public static int numDecodings(String s) {
           if(s.length() == 0 || s == null || s.charAt(0)=='0'){
                return 0;
            }
            char[] arr = s.toCharArray();
            int[] arrInt = new int[arr.length];
            for(int i = 0 ; i < arr.length ; i ++){
                arrInt[i] = arr[i] - '1' + 1;
            }
            int num1 = 1,num2 = 1;
            int tmp = 1;
            for(int i = 1 ;i < arrInt.length ; i ++){
                tmp = num2;
                if(arrInt[i] == 0){
                    if( arrInt[i-1] != 1 && arrInt[i-1]!=2)
                        return 0;
                    else{
                        tmp = num1;
                    }
                }else{
                    if(arrInt[i-1]==1){
                        tmp = num1 + num2;
                    }
                    if(arrInt[i-1]==2 && arrInt[i] <= 6){
                        tmp = num1 + num2;
                    }
                }
    
                num1=num2;
                num2 = tmp;
            }
            return tmp;
    
        }

    좋은 웹페이지 즐겨찾기