Generating power set recursively without any loops

前端 未结 8 1251
执笔经年
执笔经年 2020-12-16 18:50

How do you write a recursive method PowerSet(String input) that prints out all possible combinations of a string that is passed to it?

For example: PowerSet(\"abc\")

相关标签:
8条回答
  • 2020-12-16 19:17

    Well if you don't have loops, emulate one with recursion, using iterators this is acutally quite simple.

        public final Set<Set<Integer>> powerSet(Set<Integer> set) {
            Set<Set<Integer>> powerSet = new HashSet<>();
            powerSet(set, powerSet, set.iterator());
            return powerSet;
        }
        public final void powerSet(Set<Integer> set, Set<Set<Integer>> powerSet, Iterator<Integer> iterator) {
            if(iterator.hasNext()) {
                Integer exlude = iterator.next();
                Set<Integer> powThis = new HashSet<Integer>();
                powThis.addAll(set);
                powThis.remove(exlude);
                powerSet.add(powThis);
                powerSet(powThis, powerSet, powThis.iterator());
                powerSet(set, powerSet, iterator);
            }
        }
    //usage
            Set<Integer> set = new HashSet<>();
            set.add(1);
            set.add(2);
            set.add(3);
            set.add(4);
            log.error(powerSet(set).toString());
    
    0 讨论(0)
  • 2020-12-16 19:18

    This will also do the trick:

    var powerset = function(arr, prefix, subsets) {
      subsets = subsets || [];
      prefix = prefix || [];
      if (arr.length) {
        powerset(arr.slice(1), prefix.concat(arr[0]), subsets);
        powerset(arr.slice(1), prefix, subsets);
      } else {
        subsets.push(prefix);
      }
      return subsets;
    };
    
    powerset('abc');
    
    0 讨论(0)
提交回复
热议问题