第十八周 动态规划

算法题目 :Climbing Stairs                   

算法题目描述: 

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.

算法分析:

这个题目是一个计算n层阶梯情况下,走到顶端的路径种数(要求每次只能上1层或者2层阶梯)。
这是一个动态规划的题目:
n = 1 时 ways = 1;
n = 2 时 ways = 2;
n = 3 时 ways = 3; 
n = k 时 ways = ways[k-1] + ways[k-2];

明显的,这是著名的斐波那契数列问题

算法代码(C++):

class Solution {
public:
    int climbStairs(int n) {

    
        if (n <= 0)
            return 0;
       
        else if (n == 1)
            return 1;
       
        else if (n == 2)
            return 2;

        int *r = new int[n];

        r[0] = 1;
        r[1] = 2;

        for (int i = 2; i < n; i++)
            r[i] = r[i - 1] + r[i - 2];

        int ret = r[n - 1];
        delete []r;
        return ret;
    }
};

好的,以下是一个大二数据结构与算法的计划表的详细内容: 1. 第一学期 - 第一:学习基本数据结构,如数组、链表和栈等。 - 第二:深入学习栈和队列,包括栈和队列的应用。 - 第三:学习二叉树的基本概念,如二叉树的遍历和搜索等。 - 第四:学习平衡二叉树,如AVL树和红黑树等。 - 第五:学习哈希表和散列表,包括哈希函数的设计和冲突解决方法。 - 第六:学习图论基础概念,如图的表示和遍历等。 - 第七:学习最短路径算法,如Dijkstra算法和Floyd算法等。 - 第八:学习最小生成树算法,如Prim算法和Kruskal算法等。 - 第九:学习字符串匹配算法,如暴力法和KMP算法等。 - 第十:学习动态规划算法,包括背包问题和最长公共子序列等。 2. 第二学期 - 第一:学习高级数据结构,如堆、优先队列和B树等。 - 第二:学习算法设计与分析的基本知识,如递归和分治等。 - 第三:学习贪心算法,如活动安排问题和霍夫曼编码等。 - 第四:学习回溯算法,如八皇后问题和0/1背包问题等。 - 第五:学习分支限界算法,如旅行商问题和硬币找零问题等。 - 第六:学习网络流算法,如最大流和最小割等。 - 第七:学习NP完全性理论和近似算法,如NP完全问题和近似算法等。 - 第八:学习并行算法和分布式算法的基础知识。 - 第九:学习排序算法,如快速排序和归并排序等。 - 第十:进行算法综合实践,包括问题分析、算法设计和代码实现等。 以上是一个大二数据结构与算法的计划表的详细内容,具体实施还需要根据教学计划和个人情况进行调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值