博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Generate Parentheses
阅读量:4959 次
发布时间:2019-06-12

本文共 2640 字,大约阅读时间需要 8 分钟。

题目:

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

这个题目应该就是用backracing,加constraint来减少搜索次数,但是由于数据比较弱,若以constraint不强也可以过了,这题其实可以更优的,这里就留给你们了,弱鸡先上代码了。

这里我就用dfs暴力就ac飘过~

import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution {    public List
generateParenthesis( int n ) { List
ret = new ArrayList
(); Node head = new Node(); makeTree( head, 0, n * 2 ); dfs( head, n * 2, new String(), ret ); return ret; } public void dfs( Node node, int n, String current, List
ret ) { if( node == null ) return; if( !constraint( current ) ) return; if( node.left != null ) { dfs( node.left, n, current + node.left.data, ret ); } if( node.right != null ) { dfs( node.right, n, current + node.right.data, ret ); } if( current.length() == n ) { if( isValidate( current ) ) { ret.add( current ); } } } public boolean constraint(String str){ if( str.length() >= 1 && str.charAt( 0 ) == ')') return false; return true; } public void makeTree( Node head, int deepth, int n ) { if( deepth >= n ) return; head.left = new Node( '(' ); head.right = new Node( ')' ); deepth++; makeTree( head.left, deepth, n ); makeTree( head.right, deepth, n ); } public boolean isValidate( String s ) { char[] cs = s.toCharArray(); if( cs.length % 2 != 0 ) return false; Stack
stack = new Stack
(); for( int i = 0; i < cs.length; i++ ) { if( cs[ i ] == '[' || cs[ i ] == '(' || cs[ i ] == '{' ) { stack.push( cs[ i ] ); } else { if( stack.isEmpty() ) return false; switch( stack.pop() ) { case '(': if( cs[ i ] != ')' ) return false; break; case '[': if( cs[ i ] != ']' ) return false; break; case '{': if( cs[ i ] != '}' ) return false; break; } } } if( !stack.isEmpty() ) return false; return true; }// public static void main( String[] args ) {// Solution s = new Solution();// List
list = s.generateParenthesis( 8 );// for( String str : list ) {// System.out.println( str );// }// }}class Node { public char data; public Node left; public Node right; public Node( char data ) { this.data = data; } public Node() { }}

 

转载于:https://www.cnblogs.com/dick159/p/5148279.html

你可能感兴趣的文章
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
08号团队-团队任务5:项目总结会
查看>>
SQL2005 删除空白行null
查看>>
mysql备份与恢复
查看>>
混沌分形之迭代函数系统(IFS)
查看>>
边框圆角Css
查看>>
使用Busybox制作根文件系统
查看>>
jpg图片在IE6、IE7和IE8下不显示解决办法
查看>>
delphi之模糊找图
查看>>
Javascript模块化编程的写法
查看>>
大华门禁SDK二次开发(二)-SignalR应用
查看>>
oracle 使用job定时自动重置sequence
查看>>
集成百度推送
查看>>
在项目中加入其他样式
查看>>
在使用Kettle的集群排序中 Carte的设定——(基于Windows)
查看>>
【原】iOS中KVC和KVO的区别
查看>>