将其制作成递归算法的可能方法?
我试图让一个包含 n 个元素的数组像这样排列:
permute(x,y,z)
permute(-x,y,z)
permute(x,-y,z)
permute(-x,-y,z)
这就像二进制递增(如果 - 符号代表 1)。 我试图在代码中做到这一点,并且注意到了这一点:
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
list[3] = -list[3];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
list[3] = -list[3];
list[4] = -list[4];
perm(list, k, m);
我注意到有些部分是重复的。有没有办法将其写入循环?谢谢。
I am trying to have an array with n elements permute through like so:
permute(x,y,z)
permute(-x,y,z)
permute(x,-y,z)
permute(-x,-y,z)
It is like incrementing in binary (if the - signs represented 1s).
I am attempting to do that in code, and have noticed this:
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
list[3] = -list[3];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
perm(list, k, m);
list[1] = -list[1];
perm(list, k, m);
list[1] = -list[1];
list[2] = -list[2];
list[3] = -list[3];
list[4] = -list[4];
perm(list, k, m);
I have noticed that some sections repeat. Is there a way to write this into a loop? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这将根据您的方案返回第 k 个排列:
示例:
输出:
This returns the kth permutation according to your scheme:
Example:
Output: