careercup-递归和动态规划 9.10】的更多相关文章

2014-03-20 04:15 题目:你有n个盒子,用这n个盒子堆成一个塔,要求下面的盒子必须在长宽高上都严格大于上面的.如果你不能旋转盒子变换长宽高,这座塔最高能堆多高? 解法:首先将n个盒子按照长宽高顺序排好序,然后动态规划,我写了个O(n^2)时间复杂度的代码. 代码: // 9.10 A stack of n boxes is form a tower. where every stack must be strictly larger than the one right above…
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. 题目分析:每次只能走1或2步,问n步的话有多少中走法???? 可以用动态规划和递归解…
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 算法 递归 迭代 动态规划 斐波那契数列 MD 目录 目录递归和迭代什么是递归什么是迭代法递归和迭代的区别动态规划基本思想适用条件斐波那契数列递归法实现迭代法实现动态规划实现 递归和迭代 什么是递归 递归的基本概念:程序调用自身的编程技巧称为递归 一个函数在其定义中直接或间接调用自身的一种…
/**  * 功能:给定数量不限的硬币.币值为25分,10分.5分.1分,计算n分有几种表示法. */ public static int makeChange(int n){ return makeChange(n,25); } /** * 递归的终止条件:全然简化为1分. * @param n * @param denom * @return */ public static int makeChange(int n,int denom){ int next_denom=0; switch(…
面试题9.1:有个小孩正在上楼梯,楼梯有n个台阶,小孩一次可以上1阶.2阶或者3阶.实现一个方法,计算小孩有多少种上楼梯的方式. 思路:第4个数是前三个数之和 注意:能不能使用递归,能不能建立一个很大的数组来存储传递的参数(因为可能有空间的限制),要%1000000007防止超出范围 package cc150.recursion_dp; public class GoUpstairs { public static void main(String[] args) { // TODO 自动生成…
也是常见套路. # coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if change in coin_value_list: know_results[change] = 1 return 1 elif know_results[change] > 0: return know_results[change] else: for i in [c for c in coin_…
一.斐波那契数列 斐波那契数列就是:当n=0时,F(n)=0:当n=1时,F(n)=1:当n>1时,F(n) = F(n-1)+F(n-2). 根据斐波那契数列的定义,斐波那契数列为(从n=1开始):1,1,2,3,5,8...,也就是除了第1项和第2项外,对于第N项,都有F(n) = F(n-1)+F(n-2) 1.时间复杂度为O(2n)的暴力递归算法 暴力递归算法是最慢的一种方法,加入要计算F(10)的值,那么就要计算F(9)和F(8)的值,而计算F(9)的值需要计算F(8)和F(7)的值,…
//递归         public static long recurFib(int num)         {             if (num < 2)             {                 return num;             }             else             {                 return recurFib(num - 1) + recurFib(num - 2);             }   …
1,关键词解释 1.1 暴力递归: 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子问题的结果之后的决策过程 4, 不记录每一个子问题的解 1.2 动态规划: 1, 从暴力递归中来 2, 将每一个子问题的解记录下来,避免重复计算 3, 把暴力递归的过程,抽象成了状态表达 4, 并且存在化简状态表达,使其更加简洁的可能 2,学会尝试才能掌握 2.1 P类问题和NP问题 P类问题:时间复杂度为多项式: 知道怎么算,让计算…
2014-03-20 04:04 题目:给你不限量的1分钱.5分钱.10分钱.25分钱硬币,凑成n分钱总共有多少种方法? 解法:理论上来说应该是有排列组合的公式解的,但推导起来太麻烦而且换个数据就又得重推了,所以我还是用动态规划解决. 代码: // 9.8 Given unlimited quarters(25 cents), dimes(10 cents), nickels(5 cents) and pennies(1 cent), how many ways are there to rep…