`
lxwt909
  • 浏览: 566996 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
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;
        }
    }
}

 

0
0
分享到:
评论

相关推荐

    数据结构队列

    数据结果队列的源代码及实现。 cout请按照序号选择您所要操作的内容:"; cout元素插入队尾;"; cout查看队头元素;... cout求解杨辉三角;"; // cout搜索第I个元素的地址;"; // cout判别链表是否为空;";

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    4.15 打印杨辉三角 4.16 复杂级数的前n项和 4.17 寻找矩阵中的“鞍点” 4.18 n阶勒让德多项式求解 4.19 递归反向输出字符串 4.20 一年中的第几天 第5章 数学趣题(一) 5.1 舍罕王的失算 5.2 求两个数的最大公约数...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例034 使用for循环输出杨辉三角 43 实例035 使用嵌套循环在控制台上输出 九九乘法表 44 实例036 用while循环计算1+1/2!+1/3!…1/20! 45 实例037 for循环输出空心的菱形 46 实例038 foreach循环优于for循环 47 实例...

    C程序范例宝典(基础代码详解)

    实例017 打印杨辉三角 22 1.4 循环的数学应用 23 实例018 序列求和 23 实例019 简单的级数运算 24 实例020 用while语句求n! 25 实例021 特殊等式 26 实例022 求一个正整数的所有因子 27 实例023 ...

    C语言通用范例开发金典.part2.rar

    1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的表示 14 范例1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组...

    C语言通用范例开发金典.part1.rar

    1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的表示 14 范例1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组...

    C 开发金典

    1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的表示 14 范例1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组...

Global site tag (gtag.js) - Google Analytics