package queue; import java.util.concurrent.ConcurrentLinkedDeque; /** * Created by Lanxiaowei * Craated on 2016/12/12 9:03 * 求解杨辉三角的第K层的所有元素 * 使用队列求解 */ public class YHTriangleWithQueue { public static void main(String[] args) throws InterruptedException { int k = 6; int[][] nums = kTier(k); for(int j=0; j < k; j++) { System.out.print(nums[k % 2][j] + " "); } } public static int[][] kTier(int k) throws InterruptedException { int[][] nums = new int[2][k]; if(k <= 0) { throw new IllegalArgumentException("Argument k MUST be > 0."); } ConcurrentLinkedDeque<Event> queue = new ConcurrentLinkedDeque<Event>(); Event head = new Event(1,1); Event tail = new Event(); int level = 0; int pos = 0; queue.add(head); while (!queue.isEmpty()) { head = queue.getFirst(); level = head.getLevel(); pos = head.getPos(); if(pos == 1 || pos == level) { nums[level % 2][pos - 1] = 1; } else { nums[level % 2][pos - 1] = nums[(level - 1) % 2][pos - 1] + nums[(level - 1) % 2][pos - 2]; } if(level < k) { Event tt = new Event(level + 1,pos); queue.addLast(tt); if(pos == level) { Event t = new Event(tt.getLevel(),pos + 1); queue.addLast(t); } } queue.pop(); } return nums; } public static class Event { //表示第几层 private int level; //第几位 private int pos; public Event() {} public Event(int level, int pos) { this.level = level; this.pos = pos; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public int getPos() { return pos; } public void setPos(int pos) { this.pos = pos; } } }
使用队列求解杨辉三角的第K层的所有元素
猜你喜欢
转载自iamyida.iteye.com/blog/2344378
今日推荐
周排行