Вы хотите, чтобы все перестановки каждого члена powerset входа.
permSub("abc", "")
func permSub(input, perm)
print perm
if input = "" return
for i = 0 to input.length-1
permSub(input[0..i]+input[i+1..input.length), perm+input[i]
end
end
Где input[i..j]
представляет подстроку input
от i(inclusive)
до j(exclusive)
, а +
- конкатенацию строк.
Обратите внимание, что это будет включатьпустой набор, который, строго говоря, является правильным, но вы его не включили.
Вот оригинальная реализация Java и мое преобразование в C ++, что вам не следуетдоверие:)