我写的杨辉三角生成算法,请大家评价一下,有没有不足或更好的算法
是否会造成内存泄漏?
是否有更优的算法?我看到一个是先把所有的1先赋值,再填充其它项,循环两次我觉得不太好。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Memo1: TMemo; Panel1: TPanel; LabeledEdit1: TLabeledEdit; Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private yh:array of array of Integer; procedure yhTriangle(row:Integer); { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var s:TStrings; ss:string; r,I,J: Integer;begin try r:=StrToInt(LabeledEdit1.Text); except r:=0; ShowMessage('只能输入数字'); LabeledEdit1.Clear; LabeledEdit1.SetFocus; end; yhTriangle(r); s:=TStringList.Create; for I := 0 to r - 1 do begin ss:=''; for J := Low(yh[i]) to High(yh[i]) do ss:=ss+IntToStr(yh[i][j])+' '; s.Add(Trim(ss)); end; Memo1.Lines:=s; s.Free;end;procedure TForm1.Button2Click(Sender: TObject);begin Close;end;procedure TForm1.yhTriangle(row:Integer);var i: Integer; j: Integer;begin //开辟空间 SetLength(yh,row); for i:= Low(yh) to High(yh) do begin SetLength(yh[i],i+1); end; //填充 for i := Low(yh) to High(yh) do for j := Low(yh[i]) to High(yh[i]) do begin if (j=Low(yh[i])) or (i=j) then yh[i][j]:=1 else yh[i][j]:=yh[i-1][j-1]+yh[i-1][j]; end;end;end.procedure TForm1.yhTriangle(row: Integer);var i, j: Integer;begin SetLength(yh, row); for i := 0 to row - 1 do begin SetLength(yh[i], i + 1); yh[i][0] := 1; yh[i][i] := 1; for j := 1 to i - 1 do yh[i][j] := yh[i-1][j-1] + yh[i-1][j]; end;end;