重复的正则表达式排列

时间:2017-06-25 09:03:38

标签: java regex permutation

我必须列出3个给定数字中所有可能的4位数组合。 每个数字至少应使用一次。如果数字是(1,2,4),则选项1122无效,因为它不使用数字4。 我丑陋的代码看起来像这样:

{{1}}

它列出了36种组合,这是正确答案。

你能否建议我使用正则表达式而不是那种情况?

2 个答案:

答案 0 :(得分:1)

可能的组合是:

1241
1242
1244

我只使用了3个必需的数字(1,2,4),只剩下一个数字来填充。由于我们有3位数可供选择,因此只有三种可能的组合。

要获取所有排列,请对每个数字中的所有数字进行随机播放,并消除重复数据。有很多关于如何获得排列的文章,例如: Permutation of array。要消除重复,您可以使用Java Set。

答案 1 :(得分:0)

以下正则表达式将测试您的数字是4位数字,由1,2和4组成,每个数字至少出现一次,使用前瞻:

^(?=.*1)(?=.*2)(?=.*4)[124]{4}$

不使用前瞻的解决方案是可能的,但也非常无趣,因为你必须列出每个排列的第三个(你只能获得描述一个特定点可以包含三个符号中的任何一个的机会)。

正如其他人所说,将这个正则表达式与当前代码一起使用仍然是一种非常低效的方法来生成所需的排列。