• [Leetcode]Valid Parentheses&Generate Parentheses随记


    No.20, Valid Parentheses

    No.22, Generate Parentheses

    第一个题目主要是判断给定的括号序列是否合法(即成对),这里括号包含(){}[]。第二个题是生成n对括号组成的合法的序列,这里括号只是()。

    第一题括号配对,这里括号的规律是:如果碰到了右括号,就需要看一下有没有配对的左括号。这里可以使用栈的方式实现,如果是左括号,则压栈,如果是右括号,则出栈,看是否弹出了配对的左括号。(这里的原理:({[]}),从中间[]开始消除,然后是{},最后是()),可以采用反证法证明,首先栈中不可能有右括号,因为只有左括号才会入栈,如果弹出的左括号和碰到的右括号不匹配,那么对于合法的括号序列来说,该右括号之前应该有一个和左括号配对的右括号,但是事实上没有。

    public class Solution {
            public boolean isValid(String s) {
              Stack stack=new Stack();
              for(int i=0;i<s.length();i++){
                  char c=s.charAt(i);
                  if(c=='['||c=='{'||c=='('){
                      stack.push(c);
                  }
                  if(c==')')
                      if(stack.isEmpty()||(char)stack.pop()!='(')
                          return false;
                  if(c=='}')
                      if(stack.isEmpty()||(char)stack.pop()!='{')
                          return false;
                  if(c==']')
                      if(stack.isEmpty()||(char)stack.pop()!='[')
                          return false;
              }
              if(stack.isEmpty()){
                  return true;
              }
              else
                  return false;
          }
    }

    第二题,同样也是有一定规则的,例如生成时,如果当前左括号的数量小于等于右括号的数量,那么下一个肯定不可能是右括号;否则下一个可能是左括号也可能是右括号。

    这里可以采用递归的方式求解,在每次递归时,如果剩余左括号,那么先增加左括号进行递归,如果剩余右括号且右括号的数量小于左括号,那么增加右括号递归。(都符合的话,两种都会进行递归)

    public class Solution {
         public List<String> generateParenthesis(int n) {
                 List<String> result=new ArrayList<String>();
                generate(n,n,"",result);
                return result;
         }
         public void generate(int left,int right,String s,List<String> result){
             if(left==0&&right==0){
    
                 result.add(s);
             }
             if(left>0){
                 generate(left-1,right,s+"(",result);
             }
             if(right>0&&left<right){
                 generate(left,right-1,s+")",result);
             }
         }
    }
  • 相关阅读:
    linq 喜悦
    五班二组高级软件测试作业一总结
    五班二组高级软件测试进度报告
    五班二组黑盒测试实践作业进度报告(1)
    五班二组高级软件测试进度报告
    五班二组高级软件测试进度报告
    [ 语文 ] 西游记50~52回阅读笔记
    [ 具体数学 ] 0:前言
    [ 具体数学 ] 3:和式与封闭式
    [ 历史 ] 黄巢起义
  • 原文地址:https://www.cnblogs.com/lilylee/p/5235411.html
Copyright © 2020-2023  润新知