杨辉三角,洗牌算法
杨辉三角
给定一个非负整数numRows,生成杨辉三角的前numRows行。
在杨辉三角中,每个数是它的左上方和右上方的数的和。
public List<List<Integer>> generate(int numRows){List<List<Integer>> ret = new ArrayList<>();List<Integer> row = new ArrayList<>();row.add(1);ret.add(row);for (int i = 0; i < numRows; i++) {List<Integer> curRow = new ArrayList<>();curRow.add(1);List<Integer> prevRow = ret.get(i-1);for (int j = 0; j < i; j++) {int x = prevRow.get(j)+prevRow.get(j-1);curRow.add(x);}curRow.add(1);ret.add(curRow);}return ret; }
洗牌算法
import java.util.ArrayList; import java.util.List; import java.util.Random;public class CardList {private static final String[] SUITS = {"♦","❤","♠","♣"};public static List<Card> buyCards(){List<Card> list = new ArrayList<>();for (int i = 0; i < SUITS.length; i++) {for (int j = 0; j <= 13; j++) {Card card = new Card(SUITS[i],j);list.add(card);}}return list;}public static void shuffle(List<Card> list){Random random = new Random();for (int i = list.size()-1; i > 0; i++) {int index = random.nextInt(i);swap(list,i,index);}}private static void swap(List<Card> list,int i,int j){Card tmp = list.get(i);list.set(i,list.get(i));list.set(j,tmp);}public static void main(String[] args) {List<Card> list = buyCards();System.out.println(list);shuffle(list);System.out.println(list);List<List<Card>> hand = new ArrayList<>();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 = list.remove(0);hand.get(j).add(card);}}} }
public class Card {private String suit;private int rank;public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "Card{" +"suit='" + suit + '\'' +", rank=" + rank +'}';}public String getSuit() {return suit;}public void setSuit(String suit) {this.suit = suit;}public int getRank() {return rank;}public void setRank(int rank) {this.rank = rank;} }