读书人

小弟我写的杨辉三角生成算法请大家评

发布时间: 2012-02-28 13:06:35 作者: rapoo

我写的杨辉三角生成算法,请大家评价一下,有没有不足或更好的算法
是否会造成内存泄漏?
是否有更优的算法?我看到一个是先把所有的1先赋值,再填充其它项,循环两次我觉得不太好。

Delphi(Pascal) code
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.


[解决办法]
把判断可以省略掉:
Delphi(Pascal) code
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; 

读书人网 >.NET

热点推荐