4.1.杨辉三角
这个题吗,如果使用数组的话,很好做,但是
必须要使用顺序表,并且List<List< Integer >>什么意思?
如果联想一下二维数组,不难知道,这是一个二维顺序表。
public List<List<Integer>> generate(int numRows) {
List<List<Integer>>list=new ArrayList<>();
//先把第一行填满
List<Integer>list0=new ArrayList<>();
list0.add(1);
list.add(list0);
//再把剩余的填满
for (int i=1;i<numRows;i++){
List<Integer>curRow=new ArrayList<>();
//第一个
curRow.add(1);
//中间
List<Integer>preRow=list.get(i-1);
for (int j = 1; j < i; j++) {
int val1=preRow.get(j);
int val2=preRow.get(j-1);
curRow.add(val2+val1);
}
//最后一个
curRow.add(1);
list.add(curRow);
}
return list;
}
4.2.简单的洗牌游戏
一副拍克牌,除去大小王,三个人完,洗完牌后,三个人轮流拿一张牌,拿五轮,写出算法。
Card类
public class Card {
public int rank; //牌面值
public String suit;//花色
public Card(int rank, String suit) {
this.rank = rank;
this.suit = suit;
}
@Override
public String toString() {
return '['+suit+" "+rank+']';
}
}
CardDemo类
public class CardDemo {
public static final String[]suits={"♣","♦","♥","♠"};
public List<Card> buyCard(){
List<Card>cards=new ArrayList<>(52);
for (int i=0;i<4;i++){
for (int j=1;j<=13;j++){
int rank=j;
String suit=suits[i];
Card card=new Card(rank,suit);
cards.add(card);
}
}
return cards;
}
private void Swap(List<Card>cards,int i,int j){
Card tmp=cards.get(i);
cards.set(i,cards.get(j));
cards.set(j,tmp);
}
//洗牌
public void shuttle(List<Card>cards){
Random random=new Random();
for (int i = cards.size()-1; i >0 ; i--) {
int index=random.nextInt(i);
Swap(cards,i,index);
}
}
//发牌
public List<List<Card>> play(List<Card>cards){
List<List<Card>>hand=new ArrayList<>(3);
List<Card>hand1=new ArrayList<>();
List<Card>hand2=new ArrayList<>();
List<Card>hand3=new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
for (int i=0;i<5;i++){
for (int j=0;j<3;j++){
Card card=cards.remove(0);
hand.get(j).add(card);
}
}
return hand;
}
}