【面试题】N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?

走台阶算法(本质上是斐波那契数列)在面试中常会遇到,描述就如题目那样:总共100级台阶(任意级都行),小明每次可选择走1步、2步或者3步,问走完这100级台阶总共有多少种走法?

一、 题目分析

这个问题本质上是斐波那契数列,假设只有一个台阶,那么只有一种跳法,那就是一次跳一级,f(1)=1;如果有两个台阶,那么有两种跳法,第一种跳法是一次跳一级,第二种跳法是一次跳两级,f(2)=2。如果有大于2级的n级台阶,那么假如第一次跳一级台阶,剩下还有n-1级台阶,有f(n-1)种跳法,假如第一次条2级台阶,剩下n-2级台阶,有f(n-2)种跳法。这就表示f(n)=f(n-1)+f(n-2)。将上面的斐波那契数列代码稍微改一下就是本题的答案。我们来看一下代码的实现。

二、斐波那契数列法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Test {
static final int s = 100; //自定义的台阶数

static int compute(int stair){
if ( stair <= 0){
return 0;
}
if (stair == 1){
return 1;
}
if (stair == 2){
return 2;
}
return compute(stair-1) + compute(stair-2);
}

public static void main(String args[]) {
System.out.println("共有" + compute(s) + "种走法");
}
}

好看的多说样式

介于不想破坏主题评论框与整体的协调性,所以就把多说评论框的样式改成了跟主题自带评论一样的样子…下边是截图

多说样式

啊…简简单单就好,这个样式也是抄袭 jjlin 的,头像什么的都没有做动画 没意义我觉得

【Java】内部类(Inner Class)如何创建(new)

简单来说,内部类(inner class)指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。

那么对于内部类,该如何去使用呢?

下面给出静态成员类(Static Member Class)和普通成员类(Member Class)使用的方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package cuc;
import cuc.TestClass.Inner1;

public class Main {

public static void main(String args[]) {
//静态的内部类
TestClass.Inner1 inner1 = new Inner1(); //和普通的顶层类new的方法一样
inner1.report();

//普通内部成员类
TestClass tc = new TestClass();
TestClass.Inner2 inner2 = tc.new Inner2(); //注意这里的使用方式
inner2.report();
}
}

【Android】 加解密算法 HMAC 的使用

1、HMAC算法

   HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

简而言之,HMAC就是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥。因此MAC算法也经常被称作HMAC算法。关于hmac算法的详情可以参看RFC 2104(http://www.ietf.org/rfc/rfc2104.txt),这里包含了HmacMD5算法的C语言实现。

【Android】app打包成apk文件以后,如何查看VersionCode、VersionName等版本信息

Android App打包成Apk后,其实是一个压缩文件,可以将后缀名apk改为zip然后用winrar打开也能看到里面的文件结构。还能看到AndroidManifest.xml。但是里面的内容经过编码显示为乱码,不方便查看。


aapt工具:

  这里我们可以使用aapt工具来查看。aapt.exe工具即Android Asset Packaging Tool,在SDK的build-tools目录下。

  该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件,尽管你可能没有直接使用过aapt工具,但是build scripts和IDE插件会使用这个工具打包apk文件构成一个Android 应用程序。在使用aapt之前需要在环境变量里面配置SDK-tools路径,或者是路径+aapt的方式进入aapt。

  也就是说平时我们不会用这个东西,但是打包成Apk的时候其实是用到了的,只不过IDE替我们做了这一步,那么我们就用这个工具来查看VersionCode和VersionName。

操作流程:

1、首先找到aapt工具,在Android SDK文件夹下的build-tools包里,如下:

1
cd D:\Android\SDK\build-tools\23.0.0_rc3

2、然后使用aapt dump bading XXX.apk

1
aapt dump badging C:\Users\kuguan\Desktop\app-release_1.0.9.apk

就能看到PackageName,VersionCode,LauncherActivity等信息,如下图:

应用包名PackageName:

LauncherActivity:

【Java】不用循环语句如何输入打印数组元素

Java中可以使用Arrays.toString()来输出数组,免了使用各种循环来挨个print的痛苦。

1
2
3
4
5
6
7
8
9
package javacc.test;
import java.util.Arrays;

public class Test {
public static void main(String[] args) {
int[] array = {0,1,4,7,2,5,8,3,6,9};
System.out.println(Arrays.toString(array)); //注意这里的 Arrays.toString()
}
}

【Android】Activity与Fragment的生命周期的关系

一、问题描述:

假设有两个Activity(1和2),每个Activity拥有一个Fragment,并分别有一个Button,点击Button1可以start Activity2,然后点击Button2可以finish掉自己(即Activity2),然后返回到Activity1。根据这个简单模型描述一下Activity和Fragment的生命周期之间的依赖关系?


【Android】Fragment的生命周期详解

作为Android开发的基础知识,大家可能都了解Activity的生命周期,但是Fragment的生命周期和Activity生命周期之间的关系到底是怎么样的呢?相互调用机制又如何呢?

一、我们首先观察一下Activity的生命周期:

【Android】长按连续触发事件的实现方法

项目中需要实现一个类似购物车数量的小组件,需要单击时增加数量,长按时可以连续增大,之前的代码实现效果不理想,google后得到一个解决方法,测试可以完美实现。

实现效果大致如图:

【原理说明】

  • 大致原理是,如果手指按在view上,则使用ScheduledExecutorService对象执行scheduleWithFixedDelay()方法,每隔一个间隔不停地向Handler发送Message,此处Message里的信息是View id,然后由Handler在handlemessage的时候处理需要触发的事件。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :