LeetCode 394 字串解碼

qq_42799920發表於2020-11-01

 1.

class Solution {
    int index=0;
    public String decodeString(String s) {
        return analysis(s);
    }
    public String analysis(String s){
        StringBuilder sb = new StringBuilder();
        int num=0;
        String temp;
        while(index<s.length()){
            if(s.charAt(index)>='0'&&s.charAt(index)<='9'){
                num=num*10+s.charAt(index)-'0';
            }else if(s.charAt(index)=='['){
                index++;
                temp = analysis(s);
                while(num-->0) sb.append(temp);
                num=0;
            }else if(s.charAt(index)==']') break;
            else sb.append(s.charAt(index));
            index++;
        }
        return sb.toString();
    }
}

舉兩個例子 3[a2[b]]    3[a]2[b]

用的遞迴思想如果遇到“[” ,就把a2[b] 傳進去處理,他會返回一個abb,把abb迴圈3遍就好了

如果是3[a]2[b] 呢? 我就是在這迷住了,注意:在3[ 這裡要遞迴  a]2[b]

在a]2[b]這一層迴圈的時候,遇見a後的]就return了,回到3[這一層迴圈了,他們始終操作的是同一個index,就到了2,所以num要置為0

相關文章