当前位置:网站首页>暴力递归到动态规划 04 (数字字符串转化)
暴力递归到动态规划 04 (数字字符串转化)
2022-07-29 22:53:00 【涛涛英语学不进去】
1. 题目

2. 暴力递归
确定好终止条件,如果选择到最后一位结束,说明这个选择没错,返回1,如果遇到0,则单位置不可变为字母;
先获取选择后一位的结果,再判断有无后两位的组合,相加即可。
public int number(String str) {
return getNumber(str.toCharArray(), 0);
}
private int getNumber(char[] chars, int curIndex) {
//如果到达最后一位,则返回 1
if (curIndex == chars.length) {
return 1;
}
//可以选择变一位 或 变两位
//变一位
//如果当前值为 数字 0 ,则没有与之对应的字母
if (chars[curIndex] == '0') {
return 0;
}
int ways = getNumber(chars, curIndex + 1);
//变两位,一共26个字母
if (curIndex + 1 < chars.length && (chars[curIndex] - '0') * 10 + (chars[curIndex + 1] - '0') < 27) {
ways += getNumber(chars, curIndex + 2);
}
return ways;
}
3. 动态规划
动态规划可以由暴力递归演化过来,dp数组就是唯一变量 curIndex 的变化范围,为 [ 0 , chars.lengrth]
初始条件为 dp[ curIndex ] = 1,即终止条件
剩下的就是根据贪心改了。
public int number2(String str) {
return getNumber2(str.toCharArray());
}
private int getNumber2(char[] chars) {
int[] dp = new int[chars.length + 1];
//只有当前位置这一个变量
// 最后一位为1
dp[chars.length] = 1;
for (int curIndex = chars.length - 1; curIndex >= 0; curIndex--) {
//此位不为0
if (chars[curIndex] != '0') {
//此位可单变为字母
int ways = dp[curIndex + 1];
if (curIndex + 1 < chars.length && ((chars[curIndex] - '0') * 10 + (chars[curIndex + 1] - '0')) < 27) {
ways += dp[curIndex + 2];
}
dp[curIndex] = ways;
}
}
return dp[0];
}
public static void main(String[] args) {
System.out.println(new StrConvert().number("111"));
System.out.println(new StrConvert().number2("111"));
}
边栏推荐
猜你喜欢

高性能数据访问中间件 OBProxy(三):问题排查和服务运维

将文件流转成file文件后使用luckysheet回显数据

【leetcode】82. 删除排序链表中的重复元素 II(中等)

怎样把某个公司所有的专利全部查到、一网打尽?

运动步数抽奖小程序开发

@Accessors 注解详解

The first round of the real offer harvester~ How does the big factory inspect the candidates?(with detailed answer)

流水线上的农民:我在工厂种蔬菜

PyCharm使用教程(详细版 - 图文结合)

专利说明书怎么写?
随机推荐
go语言中的goroutine(协程)
VsCode更新后,怎么使用使用快捷键同时生成多个元素
【面试:并发篇34:Unsafe】
PyCharm使用教程(详细版 - 图文结合)
We launched a "developer lab"
纳米金颗粒修饰核酸产品|碳纳米管载核酸-DNA/RNA材料|解析说明
嵌入式系统驱动初级【1】——内核模块上_编译方法
canvas 中如何实现物体的点选(五)
cv.copyMakeBorder(imwrite opencv)
【面试:并发篇30:多线程:happen-before】
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
A print function, very good at playing?
DNA脱氧核糖核酸修饰四氧化三铁|DNA修饰氧化锌|使用方法
DNA脱氧核糖核酸修饰石墨粉末|DNA修饰还原石墨烯功能材料|保存温度
访问公司内网
MySQL数据库进阶篇
Win7x64中使用PowerDesigner连接Oralce数据库报“[Oracle][ODBC][Ora]ORA-12154:TNS:无法解析指定的连接标识符”错误解决方法
7.联合索引(最左前缀原则)
支持keep alive长连接【转】
把字符串转换成整数