小编Sha*_*han的帖子

了解函数以生成括号

我有这个算法来生成格式正确的括号的所有组合.

有人可以解释算法的核心概念吗?我尝试通过它进行调试,但我仍然无法掌握算法背后的基本概念.

另外,关于如何为这个问题提出这样一个算法的任何一般性建议,即如何通过这种方式如此聪明地解决它,或者为了达到这个阶段必须做什么练习.

问题:

给定n括号对,编写一个函数来生成格式正确的括号的所有组合.例如,给定n = 3,解决方案集是:

“((()))”, “(()())”, “(())()”, “()(())”, “()()()”
Run Code Online (Sandbox Code Playgroud)

码:

public ArrayList<String> generateParenthesis(int n) {
    ArrayList<String> solutions = new ArrayList<String>();
    recursion(n, new String(), solutions);
    return solutions;
}

private void recursion(int n, String str, ArrayList<String> sol) {
    if(str.length() == 2 * n)
        sol.add(str);
    else {
        int left = 0;
        int right = 0;
        for(int i = 0; i < str.length(); ++i) {
            if(str.charAt(i) == '(')
                left++;
            if(str.charAt(i) == ')')
                right++;
        }
        if(left …
Run Code Online (Sandbox Code Playgroud)

java algorithm

10
推荐指数
2
解决办法
5480
查看次数

如何将Set <Set>转换为ArrayList <ArrayList>

我如何将Set<<Set<String>>var的所有元素添加到ArrayList<<ArrayList<String>>?当然我知道只是添加它们的天真方法.

 private static ArrayList<ArrayList<String>> groupAnagrams(ArrayList<String> words){
              ArrayList<ArrayList<String>> groupedAnagrams = new ArrayList<>();
              AbstractMap<String, String> sortedWords = new HashMap<>();
              Set<Set<String>> sameAnagramsSet = new HashSet<>();
              for(String word : words){
                  char[] wordToSort = word.toCharArray();
                  Arrays.sort(wordToSort);
                  sortedWords.put(word, new String(wordToSort));
              }
              for(Map.Entry<String, String> entry: sortedWords.entrySet() ){
                  Set<String> sameAnagrams = new HashSet<>();
                  sameAnagrams.add(entry.getKey());
                  for(Map.Entry<String, String> toCompare : sortedWords.entrySet()){
                      if(entry.getValue().equals(toCompare.getValue())){
                          sameAnagrams.add(toCompare.getKey());
                      }
                  }
                  if(sameAnagrams.size()>0){
                      sameAnagramsSet.add(sameAnagrams);
                  }
              }

            //-->this line does not work!  return new ArrayList<ArrayList<String>>(sameAnagramsSet);

          }
Run Code Online (Sandbox Code Playgroud)

java collections arraylist

3
推荐指数
1
解决办法
121
查看次数

为什么我无法在此方法中更改布尔变量的值

   public static void isMatchHelper(String input, String pattern, boolean ret){
        if(pattern.length() == 0 && input.length() == 0){
            ret =  true;
        }
        else if(pattern.length() == 0){
            ret =  false;
        }
        else if(input.length() == 0){
            ret =  true;
        }
        if(pattern.length() == 0 || input.length() == 0){
                return;
        }
        else if(pattern.charAt(0) == input.charAt(0)){
                isMatchHelper(input.substring(1), pattern.substring(1), ret);
        }
        if(pattern.charAt(0) == '.'){
            isMatchHelper(input, pattern.substring(1), ret);
        }
        if(pattern.charAt(0) == '*'){
            if(pattern.length() > 1){
                int countMatches = 0;
                char compareWith = pattern.charAt(countMatches + 1);
                while( countMatches != input.length() …
Run Code Online (Sandbox Code Playgroud)

java algorithm

1
推荐指数
1
解决办法
76
查看次数

标签 统计

java ×3

algorithm ×2

arraylist ×1

collections ×1