首页 > 代码库 > 使用队列求解杨辉三角的第K层的所有元素

使用队列求解杨辉三角的第K层的所有元素

Java代码  技术分享

  1. package queue;  

  2.   

  3. import java.util.concurrent.ConcurrentLinkedDeque;  

  4.   

  5. /** 

  6.  * Created by Lanxiaowei 

  7.  * Craated on 2016/12/12 9:03 

  8.  * 求解杨辉三角的第K层的所有元素 

  9.  * 使用队列求解 

  10.  */  

  11. public class YHTriangleWithQueue {  

  12.     public static void main(String[] args) throws InterruptedException {  

  13.         int k = 6;  

  14.         int[][] nums = kTier(k);  

  15.   

  16.         for(int j=0; j < k; j++) {  

  17.             System.out.print(nums[k % 2][j] + " ");  

  18.         }  

  19.     }  

  20.   下载

  21.     public static int[][] kTier(int k) throws InterruptedException {  

  22.         int[][] nums = new int[2][k];  

  23.         if(k <= 0) {  

  24.             throw new IllegalArgumentException("Argument k MUST be > 0.");  

  25.         }  

  26.         ConcurrentLinkedDeque<Event> queue = new ConcurrentLinkedDeque<Event>();  

  27.         Event head = new Event(1,1);  

  28.         Event tail = new Event();  

  29.         int level = 0;  

  30.         int pos = 0;  

  31.         queue.add(head);  

  32.         while (!queue.isEmpty()) {  

  33.             head = queue.getFirst();  

  34.             level = head.getLevel();  

  35.             pos = head.getPos();  

  36.             if(pos == 1 || pos == level) {  

  37.                 nums[level % 2][pos - 1] = 1;  

  38.             } else {  

  39.                 nums[level % 2][pos - 1] = nums[(level - 1) % 2][pos - 1] + nums[(level - 1) % 2][pos - 2];  

  40.             }  

  41.             if(level < k) {  

  42.                 Event tt = new Event(level + 1,pos);  

  43.                 queue.addLast(tt);  

  44.                 if(pos == level) {  

  45.                     Event t = new Event(tt.getLevel(),pos + 1);  

  46.                     queue.addLast(t);  

  47.                 }  

  48.             }  

  49.             queue.pop();  

  50.         }  

  51.         return nums;  

  52.     }  

  53.   下载

  54.     public static class Event {  

  55.         //表示第几层  

  56.         private int level;  

  57.         //第几位  

  58.         private int pos;  

  59.   

  60.         public Event() {}  

  61.   

  62.         public Event(int level, int pos) {  

  63.             this.level = level;  

  64.             this.pos = pos;  

  65.         }  

  66.         public int getLevel() {  

  67.             return level;  

  68.         }  

  69.   

  70.         public void setLevel(int level) {  

  71.             this.level = level;  

  72.         }  

  73.   

  74.         public int getPos() {  

  75.             return pos;  

  76.         }  

  77.   

  78.         public void setPos(int pos) {  

  79.             this.pos = pos;  

  80.         }  

  81.     }  

  82. }  


使用队列求解杨辉三角的第K层的所有元素