【Java】力扣 - 刷题笔记 - 面试题 08.09

【Java】力扣 - 刷题笔记 - 面试题 08.09

【Java】力扣 - 刷题笔记 - 面试题 08.09

每日一道题,提升一点点

题目介绍

面试题 08.09. 括号
括号。设计一种算法,打印n对括号的所有合法的(例如,开闭一一对应)组合。

说明:解集不能包含重复的子集。

例如,给出 n = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

解题思路

  • 1.题目分析
    我们可以先把所有可能全部加入到list中去,然后把不符合规则的元素遍历去掉(倒着来,不然好像有问题)
class Solution {
	// 定义一个成员变量
	private List<String> list = new ArrayList<>();

	public List<String> generateParenthesis(int n) {
		getElement("(",2*n - 1);
		for (int i = list.size() - 1; i >= 0 ; i--) {
			if (!compliance(list.get(i))){
				list.remove(i);
			}
		}
		return list;
	}
	// 判断元素是否满足要求
	public boolean compliance(String str) {
		int sum = 0;
		char[] cs = str.toCharArray();
		for (int i = 0; i < cs.length; i++) {
			if (cs[i] == '(') {
				sum += 1;
			} else {
				sum -= 1;
			}
			if (sum < 0) {
				return false;
			}
		}
		return sum == 0;
	}
	// 把所有的可能都加到list中
	public void getElement(String str, int n) {
		if (n > 0){
			getElement(str+"(",n-1);
			getElement(str+")",n-1);
		} else {
			list.add(str);
		}
	}
}
  • 2.提交结果
    在这里插入图片描述
  • 3.结果反思
    在这里插入图片描述
    嗨呀,真滴难受,随着做题的难度的递增,发现做题的速度越来越慢,而且结果也不尽人意,遇到瓶颈了,仔细想一想,应该是数据结构忘的差不多了,如果要继续做下去的话,应该需要把以前学的数据结构的知识捡起来重新复习一遍的(算法基础),但是我今后的发展方向应该是JavaWeb方向,不确定是否需要把数据结构捡起来,所以暂时把刷题缓一缓,先把Java复习完,之后再决定要不要学习算法吧,任重道远,加油!

猜你喜欢

转载自blog.csdn.net/qq_35132089/article/details/108170271