排列组合

///代码开始
function PermutationCombination(mArr: array of string;
  mStrings: TStrings): Boolean;
var
  I, J: Integer;
  T: string;
  S: string;
begin
  Result := False;
  if not Assigned(mStrings) then Exit;
  mStrings.Clear;
  T := '';
  for I := Low(mArr) to High(mArr) do
    if mArr[I] <> '' then begin
      T := T + mArr[I][1];
      S := S + mArr[I][Length(mArr[I])];
    end else Exit;
  while T <> S do try
    mStrings.Add(T);
    J := Length(S);
    for I := High(mArr) downto Low(mArr) do begin
      if Pos(T[J], mArr[I]) >= Length(mArr[I]) then
        T[J] := mArr[I][1]
      else begin
        T[J] := mArr[I][Pos(T[J], mArr[I]) + 1];
        Break;
      end;
      Dec(J);
    end;
    mStrings.Add(S);
  except
    Exit;
  end;
  Result := True;
end; { PermutationCombination }
///代码结束

///示例开始
procedure TForm1.Button1Click(Sender: TObject);
begin
  PermutationCombination(['ACDE', 'FGH', 'IJKL', 'MNO', 'PQRST'], Memo1.Lines)
end;
///示例结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值