救救小白,LC22题括号生成

1,这个代码里的left和right是怎么对应做括号右括号的啊

 

2能给个代码加上main主方法打印输出结果看看嘛?

 

可以的,你创建一个main方法,方法内调用generateParentheses方法,并传参数。

class Solution {
    // Leetcode 22. Generate Parentheses
    // Backtracking
    // Time Complexity: Hard To Say
    // Space Complexity: Hard To Say
    public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        backtracking(n, result, 0, 0, "");
        return result;
    }

    private void backtracking(int n, List<String> result, int left, int right, String str) {
        if (right > left) {
            return;
        }
        if (left == n && right == n) {
            result.add(str);
            return;
        }

        if (left < n) {
            backtracking(n, result, left+1, right, str+"(");
        }

        if (right < left) {
            backtracking(n, result, left, right+1, str+")");
        }
    }
}

 


import java.util.ArrayList;
import java.util.List;

public class demoMedium22 {

        public static void main(String[] args) {
            demoMedium22 s = new demoMedium22();
            List<String> st = s.generateParenthesis(3);
        }

        public List<String> generateParenthesis(int n) {
            List<String> result = new ArrayList<>();
            backtracking(n, result, 0, 0, "");
 
            System.out.println(result);
            return result;
        }

        private void backtracking(int n, List<String> result, int left, int right, String str) { 
            if (right > left) { 
                return;
            } 

            if (left == n && right == n) {
                result.add(str); 
                System.out.print("执行次数");
                return;
            } 
            if (left < n) {     
                backtracking(n, result, left + 1, right, str + "(");
            } 
       

            if (right < left) {
                backtracking(n, result, left, right + 1, str + ")");
            } 
        }
    }