可能的组合?

时间:2012-01-29 16:05:38

标签: perl

在Perl中,如何测试数字中所有可能的组合。 例如,我感兴趣的组合是分离。

例如:53可能是“5 3”或只是“53” 例如:215可以是“21 5”或“2 15”

1 个答案:

答案 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";
}