function Collocate(mStrings: TStrings; mStr: string): Boolean; { 全排列 } procedure pCollocate(mLeft, mRight: string); var I, L: Integer; Temp: string; begin L := Length(mLeft); if L = 0 then mStrings.Add(mRight) else for I := 1 to L do begin Temp := mLeft; Delete(Temp, I, 1); pCollocate(Temp, Concat(mRight, mLeft[I])); end; end; begin Result := False; if not Assigned(mStrings) then Exit; mStrings.BeginUpdate; try mStrings.Clear; pCollocate(mStr, ''); finally mStrings.EndUpdate; end; Result := True; end; { Collocate }procedure TForm1.Button1Click(Sender: TObject); begin Collocate(Memo1.Lines, '123456') end;
给你个简单的: procedure TForm1.Button1Click(Sender: TObject); var charSet: set of '1'..'9'; i,j,count:integer; ch:char; str:string[6]; begin for i:=100000 to 999999 do begin str:=IntToStr(i); count:=0; charSet:=['1','2','3','4','5','6']; for j:=1 to 6 do begin ch:=str[j]; if ch in charSet then begin Exclude(charSet,ch); inc(count); end; end; if count=6 then begin Memo1.Lines.Add(str); end; end; end;
procedure pCollocate(mLeft, mRight: string);
var
I, L: Integer;
Temp: string;
begin
L := Length(mLeft);
if L = 0 then
mStrings.Add(mRight)
else for I := 1 to L do begin
Temp := mLeft;
Delete(Temp, I, 1);
pCollocate(Temp, Concat(mRight, mLeft[I]));
end;
end;
begin
Result := False;
if not Assigned(mStrings) then Exit;
mStrings.BeginUpdate;
try
mStrings.Clear;
pCollocate(mStr, '');
finally
mStrings.EndUpdate;
end;
Result := True;
end; { Collocate }procedure TForm1.Button1Click(Sender: TObject);
begin
Collocate(Memo1.Lines, '123456')
end;
procedure TForm1.Button1Click(Sender: TObject);
var
charSet: set of '1'..'9';
i,j,count:integer;
ch:char;
str:string[6];
begin
for i:=100000 to 999999 do
begin
str:=IntToStr(i);
count:=0;
charSet:=['1','2','3','4','5','6'];
for j:=1 to 6 do
begin
ch:=str[j];
if ch in charSet then
begin
Exclude(charSet,ch);
inc(count);
end;
end;
if count=6 then
begin
Memo1.Lines.Add(str);
end;
end;
end;