leetcode 397. Integer Replacement | 397. 整数替换(动态规划,记忆化搜搜)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 397. Integer Replacement | 397. 整数替换(动态规划,记忆化搜搜)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目
https://leetcode.com/problems/integer-replacement/
題解
一開始寫了個 dp,結(jié)果因?yàn)榇髷?shù)組 OOM 了。
dp 數(shù)組需要計算每一個值,有的值是用不到的,于是改成了遞歸,可以避免一些沒有必要的計算。
另外要注意其中有一個測試用例是 2^32-1,如果先 +1 再除以 2 的話,會溢出,所以要先除以 2,再加 1。
class Solution {public int integerReplacement(int n) { // 大dp數(shù)組Memory Limit Exceeded了。。 // int[] dp = new int[n + 1]; // dp[1] = 0; // for (int i = 2; i < dp.length; i++) { // if (i % 2 == 1) { // dp[i] = Math.min(dp[i - 1], dp[(i + 1) / 2] + 1) + 1; // } else { // dp[i] = dp[i / 2] + 1; // } // } // return dp[n];// 記憶化搜索Map<Integer, Integer> map = new HashMap<>();map.put(1, 0);return process(map, n);}public int process(Map<Integer, Integer> map, int i) {if (map.containsKey(i)) {return map.get(i);} else {int n;if (i % 2 == 1) {n = Math.min(process(map, i - 1), process(map, i / 2 + 1) + 1) + 1;} else {n = process(map, i / 2) + 1;}map.put(i, n);return n;}} } 超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的leetcode 397. Integer Replacement | 397. 整数替换(动态规划,记忆化搜搜)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode 932. Beauti
- 下一篇: leetcode 399. Evalua