当前位置:网站首页>暴力递归到动态规划 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"));
}
边栏推荐
猜你喜欢
随机推荐
推荐 7 个学习 Web3 的开源资源
【LeetCode-SQL每日一练】——2. 第二高的薪水
纳米金颗粒修饰核酸产品|碳纳米管载核酸-DNA/RNA材料|解析说明
Redis和MySQL如何保持数据一致性
【C语言入门】ZZULIOJ 1036-1040
【微信小程序】一文解忧,事件绑定
leetcode 890. Find and Replace Pattern(查找和替换pattern)
DD1 连续最大和
专利说明书怎么写?
将文件流转成file文件后使用luckysheet回显数据
【leetcode】剑指 Offer II 006. 排序数组中两个数字之和(二分查找、双指针)
研究生怎么申请专利,流程是什么?
OR63 删除公共字符
ah?Now the primary test recruitment requirements will be automated?
WeChat applet sliding navigation bar (how to set the floating window of the webpage)
C语言快速入门(为了看源码)
go语言中的goroutine(协程)
流水线上的农民:我在工厂种蔬菜
A print function, very good at playing?
仿牛客论坛项目部署总结









