`
lxwt909
  • 浏览: 573474 次
  • 性别: 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
分享到:
评论

相关推荐

    输出杨辉三角

    杨辉三角在实际应用中有很多用途,如求解组合问题、解析二项式展开式等。例如,二项式定理告诉我们,任何幂次可以被看作是二项式系数的和,而这些系数正是杨辉三角中的数字。因此,杨辉三角在计算机科学中的概率论、...

    杨辉三角算法杨辉三角算法

    1. **组合数问题**:可以利用杨辉三角求解特定的组合数问题。 2. **多项式展开**:杨辉三角可以帮助快速地计算多项式的展开形式。 3. **概率论**:在概率论中,可以通过杨辉三角来解决一些概率分布的问题。 4. **...

    qqq.zip_杨辉三角栈_杨辉三角用栈

    这里我们关注的是“杨辉三角栈”和“杨辉三角用栈”的概念,以及如何利用C++来实现这两个主题。首先,我们先来理解杨辉三角和栈的原理。 杨辉三角,又称帕斯卡三角,是一个二项式系数的图形表示,它在数学、计算机...

    数据结构队列

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

    实验七 栈及队列的应用.docx

    使用队列求解约瑟夫环(报数问题) **任务描述**: 使用队列实现经典的约瑟夫环问题,即一群人围成一圈,按照一定规则报数,报到特定数字的人被淘汰,直到最后只剩下一个人。 **实现思路**: - **数据结构选择**...

    C语言编程实例

    1. **循环队列**:循环队列是数据结构中的一种,它解决了普通队列在满时无法继续插入元素的问题。通过利用数组的循环特性,当队列满时,可以通过调整队头和队尾的指针使其重新指向数组的开头,从而实现循环利用空间...

    算法典型题目总结.txt

    通常可以使用递推公式来求解: - $f(n, m) = 1$ 当 $n = 1$ 且 $m = 1$ - $f(n, n) = n $ - $f(n, m) = 1 + f(n, n - 1)$ 当 $n = m$ - $f(n, m) = f(n, m - 1) + f(n - m, m)$ 当 $n &gt; m &gt; 1$ ### 2. STL...

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

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

    C++软件课程设计

    15. **杨辉三角**:杨辉三角是组合数学中的重要概念,用于生成二项式系数。在C++中实现杨辉三角,可以学习递归或迭代的算法设计。 这些实验代码覆盖了C++的基础语法、面向对象编程、数据结构、算法和文件操作等多个...

    数据结构实验报告册

    - 设计并实现括号匹配算法、杨辉三角打印、迷宫问题求解、列车调度系统等。 ### 二叉树的实现和应用 **知识点概述:** 二叉树是一种非线性的数据结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点...

    每日一道编程题精选篇.pdf

    8. “杨辉三角”,这是一个典型的组合数学问题,可以使用递归或迭代的方法来求解,涉及到底层的二项式系数计算。 9. “Nim游戏”和“只出现一次的数字”,这两类问题通常涉及到位操作技巧,其中前者涉及到博弈论,...

    互联网面试手写代码常见题总结.docx

    涵盖了链表、数组、树、图、排序算法、动态规划、递归、循环队列、堆、栈、队列、红黑树、B 树、遍历方式、最短路径算法、堆排序、LRU 算法、二分查找、快排、杨辉三角、跳表、红黑树、链表循环判断、链表倒排、链表...

    数据结构(java版)习题解答

    - **解答**:使用二维数组存储每一层的结果,其中`triangle[i][j]`表示第i+1行第j+1个数。可以通过迭代的方式计算每一层的值。 **实验0.3:金额的中文大写形式** - **题目**:输入一个金额数字,输出其对应的中文...

    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 ...

    NOIP大纲整理:历年2000-2016NOIP提高组题目分析.pdf

    如2016年的"D2A组合数问题杨辉三角"中运用了组合数学的概念。 8. 算法优化技术:例如剪枝、快速幂、广搜+动态规划、单调队列、并查集等。比如2016年的"D1C换教室最短路(图论)/Dp"中涉及到了广搜与动态规划的结合...

    数据结构教学大纲(参考).doc

    - 队列的应用案例,如杨辉三角形、加油站模拟。 - **要求:** - 掌握栈与队列的特点。 - 熟练掌握栈的基本操作(进栈、出栈)。 - 理解递归与非递归的转换方法。 - 熟练掌握队列的基本操作(进队、出队)。 - ...

Global site tag (gtag.js) - Google Analytics