力扣刷题——22.括号生成

22.括号生成

递归

思路是只要有序列中有n个左括号,任何时候都能最多再添加n个右括号

package leetcode;

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

public class T22 {
	
	public static void main(String[] args) {
		List<String> re = new T22().new Solution().generateParenthesis(3);
		System.out.println(re);
	}
	
	class Solution {
		
		List<String> ans = new ArrayList<String>(100);
		StringBuilder tmp = new StringBuilder("");//记录每次得到的括号序列
		int aviR = 0;//记录可以添加的右括号的个数
		
	    public List<String> generateParenthesis(int n) {
	    	func(n, 0);
	    	return ans;
	    }
	    
	    public void func(int n, int index) {
	    	
	    	//左括号用完了
	    	if (n == 0 && aviR == 0) {
	    		ans.add(tmp.toString());
	    		return;
	    	}
	    	
	    	//添加一个左括号
	    	if (n != 0) {
	    		tmp.append("(");
	    		n--;
	    		aviR++;//可以使用的右括号数+1
	    		func(n, index + 1);
	    		//恢复
	    		n++;
	    		aviR--;
	    		tmp.deleteCharAt(index);
	    	}
	    	
	    	
	    	//添加一个右括号
	    	if (aviR != 0) {
	    		tmp.append(")");
	    		aviR--;
	    		func(n, index + 1);
	    		//恢复
	    		tmp.deleteCharAt(index);
	    		aviR++;
	    	}
			
		}
	}

}

posted on 2023-02-23 16:42  pumpkinsBig  阅读(30)  评论(0)    收藏  举报

导航