Swift解算法——台阶问题

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。

求总共有多少总跳法,并分析算法的时间复杂度。

首先对题目进行分析:

台阶一共有n级

因此当n = 1时——只有一种跳法

当n = 2时——有1、1 或者 2  两种跳法

  当n = 3时——有 1、1、1 或者2、1或者1、2三种跳法

。。。。。。。。。。。。。。。。。。。。。。。。。

  因此

  当n = k时——

  有 f(k-1)+f(k-2)种跳法

分析到这里,程序用哪种方式设计便一目了然——递归

//*************************************************//

func jump(var n:Int)->Int{

  //若只有一个台阶,返回1(表示一种跳法)

if(n == 1){

return 1

}

  //若有两个台阶,返回2(表示两种跳法)

if(n == 2){

return 2

}

else{

var temp = jump(n - 1) + jump(n - 2) //递归

return temp

}

}

//*************************************************//

时间: 2024-08-10 23:29:20

Swift解算法——台阶问题的相关文章

详解算法的各种复杂度的差别有多大(带图)

做算法分析的时候经常用到各种时间复杂度如O(n), O(logn), O(nlogn), O(n^2), ... 它们之间到底有多大的差别呢?下面这张图是一个直观的表达: 可见,各个常用的时间复杂度之间都存在着巨大的差异.从O(nlogn)到O(n),从O(n)到O(logn),都是性能上的巨大飞跃. 从另一个角度而言,大于O(n^2)或O(n^3)时间复杂度的程序实际上都是不可用的.根据维基百科,现在最强的CPU每秒大概可执行428亿条指令(4*10^10),而对于一个O(2^n)的程序,当n

Swift 解包

// 解包 (!) /* 如果确定一个可选类型的值一定存在,那么我们使用(!)进行解包获取他的值,或者使用Optional Binding */ let possiablestring: String? = "An possiable string" print(possiablestring!) // 解包 确定possiablestring的值确实存在,不需要每次都验证它的值 let strValues = possiablestring!.hashValue // 隐式解包的可选

C#与java中的AES加解密互解算法

一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string val) { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged

swift排序算法和数据结构

var arrayNumber: [Int] = [2, 4, 6, 7, 3, 8, 1] //冒泡排序 func maopao(var array: [Int]) -> [Int] { for var i = 0;i < array.count;i++ { for var j = i;j < array.count;j++ { if array[j] > array[j + 1] { var temp = array[j] array[j] = array[j+1] array

并查集算法详解

更好的阅读体验 并查集算法详解 算法详解 维护类型 身为一个数据结构,我们的并查集,它的维护对象是我们的关注点. 并查集适合维护具有非常强烈的传递性质,或者是连通集合性质. 性质详解 传递性质 传递性,也就是具有传递效应的性质,比如说A传递给B一个性质或者条件,让B同样拥有了这个性质或者条件,那么这就是我们所说的传递性. 连通集合性质 连通集合性,和数学概念上的集合定义是差不多的, 比如说A和B同属一个集合,B和C同属一个集合,那么A,B,C都属于同一个集合.这就是我们所谓的连通集合性质. 算法

理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]

本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 (2)原理.架构和性能 (3)监控 1. 架构 1.1 总体架构 Swift 的总体架构非常的清晰和独立: # 分层(Tier) 组件(Service) 功能(Function) 特性 部署考量 1 访问层(Access Tier) Load Balancer 硬件(比如F5)或者软件(比如HAPro

算法之:翻转二叉树

事情大概是说,Max Howell 去 Google 面试,面试官说:虽然在 Google 有 90% 的工程师用你写的 Homebrew,但是你居然不能在白板上写出翻转二叉树的代码,所以滚蛋吧. /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */

第二章 算法

算法定义 算法是描述解决问题的方法,是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作. 算法的特性 输入输出 算法具有零个或多个输入,至少有一个输出 有穷性 算法在执行有限步骤后自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成 确定性 算法的每一步都具有确定的含义,不会出现二义性 可行性 算法的每一步都是可行的,也就是说每一步都能通过执行有限步骤的次数完成 算法设计的要求 正确性 指算法至少应该具有输入输出,能得到问题的正确解 算法正确的

动态规划解决台阶问题求解

问题描述: 给定n级台阶,每次走1,2,3步,求解所有可走步骤 8个台阶,上台阶的人一次最多上3个台阶,问上这个8个台阶有多少种方法? 解题思路: 采用动态规划的思想,将大问题划分为若干个子问题,然后递归的解决每个可能的子问题. 首先,先考虑corner case: 1. 当只有一个台阶,那么有1种走法: 2. 当前只有两个台阶,那么有2种走法: 3. 当前有三级台阶,那么就存在4种走法: 接下来就要考虑如何划分子问题,在划分子问题的时候,存在三种情况,分别为: 1. 当前状态走一个台阶, 需要