[数据结构] ArrayList与顺序表(下)
一. ArrayList 的具体使用
1.简单的洗牌算法
①买一副牌
public class Card {public int rank;public String suit;public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}@Overridepublic String toString() {return "["+suit+"" +rank+"]";}
}
- 定义了面值(rank)和花色(suit)
import java.util.ArrayList;
import java.util.List;public class CardDemo {public static final String[] Cardsuit = {"♥","♠","♣","♦"};public static List<Card> BuyCard(){List<Card> cardList = new ArrayList<>(52);for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13 ; j++) {String suit = Cardsuit[i];int rank = j;Card card = new Card(rank,suit);cardList.add(card);}}return cardList;}public static void main(String[] args) {List<Card> deck = BuyCard();System.out.println(deck);}
}
- 定义了花色的数组
- 用二维数组给每一张牌赋值 , 最后用顺序表存储
②洗牌
private static void swap(List<Card> deck,int i,int j){Card t = deck.get(i);deck.set(i,deck.get(j));deck.set(j,t);}private static void shuffle(List<Card> deck){Random random = new Random();for(int i=deck.size()-1;i>0;i--){int j = random.nextInt(i);swap(deck,i,j);}}
- j 为 (0,i-1) 之间的随机数 , 交换 i 和 j 下标的元素
public static void main(String[] args) {List<Card> deck = BuyCard();System.out.println(deck);shuffle(deck);System.out.println(deck);}
2.杨辉三角
[题目] : 给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行
在「杨辉三角」中,每个数是它左上方和右上方的数的和
class Solution {public List<List<Integer>> generate(int numRows) {List<List<Integer>> ret = new ArrayList<>();//类似一个二维数组List<Integer> List0 = new ArrayList<>();List0.add(1);//处理第一行的1ret.add(List0);//在二维数组中添加第一个元素for(int i = 1;i<numRows;i++){List<Integer> cur = new ArrayList<>();cur.add(1);//每一行的第一个元素1List<Integer> preRow = ret.get(i-1);//记录上一行,以便求出新的元素for(int j = 1;j<i;j++){int val1 = preRow.get(j);//第i-1行,的第j个元素int val2 = preRow.get(j-1);//第i-1行,的第j-1个元素cur.add(val1+val2);//求和}cur.add(1);每一行的最后一个元素1ret.add(cur);}return ret;}
}