1. 程式人生 > >leetcode:括號生成(java)回溯實現

leetcode:括號生成(java)回溯實現

 應用於回溯思想:無非就是六個括號進行排列組合:也就是2^6;不是左括號就是右括號,然後進行一個一個的走不行則進行返回上一層。但是要控制住其中的左括號和右括號對應正常思想是先進行左括號所以左括號一定要比右括號多根據這個思想我進行寫程式碼經過不斷更改過測試;

package LeetCode;

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

public class HS_KuoHaoPailie {
    public List<String> generateParenthesis(int n) {
        List<String> result=new ArrayList<>();
        String a="";
        p(a,n,n,result);
        return result;
    }
    public void p(String a,int left,int right,List<String> result) {
       /* if (left > right) {
            return;
        }
*/// 開始走此條件右邊的擴號一定比左邊的小
        if (left<=right&&left>0) {
            p(a +"(", left - 1, right,result);
        }
        //在字串中的右括號小於左括號時才能進行右括號執行
        if (right>left&&right>0) {
            p(a+")" , left, right - 1,result);
        }
        if (left == 0 && right == 0) {
            result.add(a.toString());
            return;
        }
    }
      /*  if (right<left)return;
        if (left==0&&right==0){
            result.add(a);
            return ;
        }
        p(a+"(",left-1,right);
        p(a+")",left,right-1);

    }*/
      public static void main(String[] args) {
          HS_KuoHaoPailie a=new HS_KuoHaoPailie();
          System.out.println(a.generateParenthesis(3));
      }
}