# 创建字符串的所有可行排列的清单

0
2019-05-03 18:57:49

\ sum_ {i = x} ^ y {\ frac {r！} {{（ri）}！}} http://www.codecogs.com/eq.latex?%5Csum_%7Bi=x%7D%5Ey% 20％7B％20％5Cfrac％7BR！％7D％7B％7B（RI）％7D！％7D％20％7D

Knuth（数量4，分册2,7.2.1.3）告诉我们（s，t） - 混合量s + 1点与t同时取 - - （s，t） - 混合是由Knuth使用的符号相当于{t \ choose {s + t} http://www.codecogs.com/eq.latex?%7Bt%20%5Cchoose%20%7Bs+t%7D%7D。 我们可以通过首先创建每个（s，t） - 混合二进制类型（因此，大小（s + t））以及计算每个1左边的0的变化来解决这个问题。

10001000011101 - - >变为排列：0,3,4,4,4,1

0
2019-05-08 15:53:17

def perms(x, y, possible_characters)
all = [""]
current_array = all.clone
1.upto(y) { |iteration|
next_array = []
current_array.each { |string|
possible_characters.each { |c|
value = string + c
next_array.insert next_array.length, value
all.insert all.length, value
}
}
current_array = next_array
}
all.delete_if { |string| string.length < x }
end


0
2019-05-07 18:10:56

public class GeneratePermutations {
public static void main(String[] args) {
int lower = Integer.parseInt(args[0]);
int upper = Integer.parseInt(args[1]);

if (upper < lower || upper == 0 || lower == 0) {
System.exit(0);
}

for (int length = lower; length <= upper; length++) {
generate(length, "");
}
}

private static void generate(int length, String partial) {
if (length <= 0) {
System.out.println(partial);
} else {
for (char c = 'a'; c <= 'z'; c++) {
generate(length - 1, partial + c);
}
}
}
}

0
2019-05-07 18:03:39

list = originalString.split('')
index = (0,0)
list = [""]
for iteration n in 1 to y:
index = (index[1], len(list))
for string s in list.subset(index[0] to end):
for character c in originalString: