一、杨辉三角
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
思路:需要把杨辉三角映射为二维数组
二维数组的表示:
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> ret = new ArrayList<>();
List<Integer> one = new ArrayList<>();
one.add(1); //单独将第一行加入数组,为了防止下面的i-1代码越界
ret.add(one);
//i代表每一行
for (int i = 1; i < numRows; i++) {
List<Integer> curRow = new ArrayList<>();
//每一行开始的1
curRow.add(1);
for (int j = 1; j < i; j++) {
//curRow[i][j] =前一行[i-1][j]+前一行[i-1][j-1]
List<Integer> preRow = ret.get(i-1); //为了防止数组越界
int x = preRow.get(j)+preRow.get(j-1);
curRow.add(x);
}
//每一行最后一个1
curRow.add(1);
ret.add(curRow);
}
return ret;
}
}
运行代码:
public class Test1 {
public static void main(String[] args) {
Solution solution = new Solution();
List<List<Integer>> ret = solution.generate(4);
System.out.println(ret);
}
}
二、去除字符
思路:遍历s1这个字符串当前的字符,如果不在s2中,就放到list里面
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static List<Character> func(String s1,String s2) {
List<Character> ret = new ArrayList<>();
for (int i = 0; i < s1.length(); i++) {
char ch = s1.charAt(i);
if (!s2.contains(ch + "")) {
ret.add(ch);
}
}
return ret;
}
public static void main(String[] args) {
String s1 = "welcome to Beijing";
String s2 = "come";
List<Character> ret = func(s1,s2);
for (char ch: ret) {
System.out.print(ch + "");
}
}
}
三、扑克牌
实现买牌,洗牌,发牌
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class Card{
private String suit;
private int rank;
public Card(String suit, int rank) {
this.suit = suit;
this.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;
}
@Override
public String toString() {
return "["+ suit+" "+rank+"]";
}
}
public class TestCard {
public static final String[] suits = {"♥","♠","♣","♦"};
public static List<Card> buyCard(){
List<Card> desk = new ArrayList<>();
for (int i = 0; i < 4; i++) {
for (int j = 0; j <=13 ; j++) {
String suit = suits[i];
Card card = new Card(suit,j);
desk.add(card);
}
}
return desk;
}
public static void shuffle(List<Card> cardList){
for (int i = cardList.size()-1; i > 0 ; i--) {
Random random = new Random();
int index = random.nextInt(i);
swap(cardList,i,index);
}
}
private static void swap(List<Card> cardList,int i ,int j){
Card tmp = cardList.get(i);
cardList.set(i,cardList.get(j));
cardList.set(j,tmp);
}
public static void main(String[] args) {
List<Card> cardList = buyCard();
System.out.println("买牌 "+ cardList);
shuffle(cardList);
System.out.println("洗牌 "+ cardList);
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
List<List<Card>> hands = new ArrayList<>();
hands.add(hand1);
hands.add(hand2);
hands.add(hand3);
//3个人,轮流揭牌,每个人共5张牌
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
Card card = cardList.remove(0);
List<Card> hand = hands.get(j);
hand.add(i,card);//这里使用add,不能是set
}
}
System.out.println("第一个人的牌"+hand1);
System.out.println("第二个人的牌"+hand2);
System.out.println("第三个人的牌"+hand3);
}
}