利用遞歸打印帕斯卡三角
- 自己思路也有點亂了,核心思想是遞歸的往上去實現(xiàn)上一層的數(shù)組铺厨。一直往上到第二層就可以算第三層的了硬纤,再依次往下去求。每一層算完都把這一層的結(jié)果保存到map里面筝家。之所以用map也是沒辦法,因為他會重復(fù)把已經(jīng)算過的也給加進去腮鞍,感覺是兩次就可以了但是怎么也加不完缕减。只好用map芒珠。數(shù)組的長度作為鍵。就不會重復(fù)加相同長度的數(shù)組了裹芝,加了也是覆蓋了娜汁。。沒辦法掐禁,留作以后再來看。B圃省!教届!
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class PascalTriangle {
int size;
Map<Integer, int[]> hashMap;
public PascalTriangle(int size){
this.size=size;
hashMap=new HashMap<Integer,int[]>();
int a[]={1};
hashMap.put(a.length, a);
}
public int[] triangle(int size){
int x=size;
int[] a=new int[x];
if(x==2){
a[0]=1;
a[1]=1;
}else{
a[0]=1;
a[x-1]=1;
for(int i=1;i<a.length-1;i++)
a[i]=triangle(x-1)[i-1]+triangle(x-1)[i];
}
hashMap.put(a.length,a);
return a;
}
public void print(Map<Integer, int[]> hashMap){
Set<Map.Entry<Integer, int[]>> aset=hashMap.entrySet();
Iterator<Entry<Integer, int[]>> it=aset.iterator();
while(it.hasNext()){
Map.Entry<Integer,int[]> entry=it.next();
int a[]=entry.getValue();
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"\t");
}
System.out.println();
}
}
public static void main(String[] args) {
PascalTriangle p=new PascalTriangle(9);
p.triangle(9);
p.print(p.hashMap);
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者