Perl - 125 79 ตัวอักษร
การนับรวม 4 ตัวอักษรสำหรับ-ln
ตัวเลือก "" ใช้ n จาก stdin
วิธีการที่สร้างสรรค์ใหม่:
@a=0;map{%a=();map{$a{"$`100$'"}=1while/0/g;}@a;@a=keys%a}1..$_;print for@a
สร้างโซลูชันสำหรับ n โดยการแทนที่โหนดภายในใหม่ ("100") สำหรับแต่ละใบไม้ ("0") ตามลำดับในแต่ละต้นไม้จากโซลูชันสำหรับ n-1
(ฉันเป็นหนี้แนวคิดนี้กับโซลูชันของผู้อื่นที่ใช้โหนดภายในเพื่อแทนที่ [100-> 0] เพื่อทดแทนการตรวจสอบสตริงที่สร้างขึ้นตามลำดับและฉันเชื่อว่าฉันเห็น - หลังจากเขียนคำตอบของฉันตามแนวคิดนั้น - เช่นเดียวกัน 0- > 100 วิธีการก่อสร้างในการแก้ไขระดับกลางของใครบางคน)
วิธีการเรียกซ้ำก่อนหน้านี้:
sub t{my$n=shift;if($n){--$n;for$R(0..$n){for$r(t($R)){for$l(t($n-$R)){push@_,"1$l$r"}}}}else{push@_,"0"}@_}print for t$_
แบบไม่โต้ตอบซ้ำ:
sub tree {
my ($n) = @_;
my @result = ();
if ( $n ) {
for $right_count ( 0 .. $n-1 ) {
for $right ( tree( $right_count ) ) {
for $left ( tree( ($n-1) - $right_count ) ) {
push @result, "1$left$right";
}
}
}
}
else {
push @result, "0";
}
return @result;
}
foreach $tree ( tree($_) ) {
print $tree;
}