动态规划
思路:
其实和青蛙跳台阶一个道理
当有 n 个数的排列方式为
1. 第n个数字无法和前面的数字无法组合时
排列方式为:前 n-1个数的排列方式 加上当前数字,数量为 fn-1(前n-1个数字饿排列方式)
2. 第n个数字可以和前面的数字组合时
排列方式为: 前 n-1个数的排列方式 加上当前数字,数量为 fn-1(前n-1个数字饿排列方式)和 前n-2个数的排列方式 (fn-2)
两种情况,只需要判断 第n个数字是否可以和前面的数字组合
如果组合的数字为 10 到 25 就说明可以组合
转移方程:
最优子结构:
初始化 f1 = 1
public int translateNum(int num) {
/** 先将num转化为字符串*/
String s = String.valueOf(num);
/** 初始化*/
int fn_2 = 1;
int fn_1 = 1;
/** 转移方程:fn = fn-1 + fn-2 或者 fn = fn-1*/
for (int i = 2; i <= s.length(); i++){
String substring = s.substring(i - 2, i);//左闭右开,相当于将 i-2和i-1位置上的字符取下来
if (substring.compareTo("10") >= 0 && substring.compareTo("25") <= 0){
int temp = fn_1;
fn_1 = fn_2 + fn_1;
fn_2 = temp;
}else {
fn_1 = fn_1;
fn_2 = fn_1;
}
}
return fn_1;
}