所以我试着编写一个代码,它将打印出nPr方式后字符串的所有排列,其中n是字符串长度,r是输入。它接受一个前缀和String,以及一个整数。这样做除了它每次打印nPn排列而不是nPr排列。
"12"
对于r = 2,我希望它能够打印ab,ac,ad,ba,bc,bd,ca,cb,cd,da,db,dc。但它会打印出所有内容的两倍。
答案 0 :(得分:1)
您必须将递归限制设置为r
(现在为n
)。可能是这样的:
if(x.length() == 0)
change to
if(pre.length() == r)
答案 1 :(得分:0)
结果不应该让您感到惊讶:您的代码确定了所有24种排列。它仅在打印时强制执行最大长度。你可以这么说,因为r
除了打印时没有在任何地方使用过。
如果打印整个字符串,结果为:
abcd
abdc
acbd
acdb
....
您只能看到基本上是完整排列的第一个字符。
如果你想获得4分中的2分,你应该在选择r
项后停止递归:
if (pre.length() == r)
System.out.println(pre.substring(0, r));
当有人使用大于字符串长度的r
调用代码时,您可能需要确保代码仍然有效:
if (pre.length() == r || x.length() == 0)
System.out.println(pre.substring(0, r));