很容易观察到是一道动态规划
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int len = s.length();
int[] dp = new int[len];
dp[0] = 1;
for(int i = 1;i < len ;i ++) {
dp[i] = dp[i - 1];
if(s.charAt(i - 1) != '0' && Integer.parseInt(s.substring(i - 1, i + 1)) <= 25) {
dp[i] += i >= 2 ?dp[i - 2] : 1;
}
}
return dp[len - 1];
}
}
可以观察到,dp[i]只与dp[i-1]和dp[i-2]有关,所以空间可以优化到O1
class Solution {
public int translateNum(int num) {
String s = String.valueOf(num);
int len = s.length();
int now = 1;
int bef = 1;
int befbef = 1;
for(int i = 1;i < len ;i ++) {
if(s.charAt(i - 1) != '0' && Integer.parseInt(s.substring(i - 1, i + 1)) <= 25) {
now += befbef;
}
befbef = bef;
bef = now;
}
return now;
}
}

这篇博客探讨了一种动态规划问题的解决方案,通过优化空间复杂度从O(n)降至O(1)。代码展示了一个将整数转换为特定格式字符串的方法,关键在于识别状态之间的依赖关系,只保留前两个状态即可。动态规划优化对于解决复杂计算问题至关重要,尤其在内存限制严格的场景下。
402

被折叠的 条评论
为什么被折叠?



