在Perl中,如何测试数字中所有可能的组合。 例如,我感兴趣的组合是分离。
例如:53可能是“5 3”或只是“53” 例如:215可以是“21 5”或“2 15”
答案 0 :(得分:2)
实际上,您正在向字符之间的所有位置分配空格。在每个位置上,每个组合都实现或不实现空间。因此,您可以将其表示为二进制数,1表示存在空格,0表示不存在空格。
#!/usr/bin/perl
use warnings;
use strict;
my $num = shift;
my @digits = split //, $num;
my $length = length($num) - 1;
if ($length == 0) {
print "$num\n";
exit;
}
for my $i (0 .. 2 ** $length - 1) {
my $mask = sprintf "%0${length}b", $i;
my @replace_arr = split //, $mask;
my $idx = 0;
for (@replace_arr, '') {
print $digits[$idx];
print ' ' if $_;
$idx++;
}
print "\n";
}