# 1387. Sort Integers by The Power Value ###### tags: `Leetcode` `Medium` `Dynamic Programming` Link: https://leetcode.com/problems/sort-integers-by-the-power-value/ ## 思路 先用dp算出每个数字的power value然后排序 ## Code java ```java= class Solution { public int getKth(int lo, int hi, int k) { Map<Integer, Integer> dp = new HashMap<>(); dp.put(1, 0); List<int[]> list = new ArrayList<>(); for(int i=lo; i<=hi; i++){ list.add(new int[]{i, getPowerValue(i, dp)}); } Collections.sort(list, (a,b)->(a[1]==b[1]?a[0]-b[0]:a[1]-b[1])); return list.get(k-1)[0]; } private int getPowerValue(int num, Map<Integer, Integer> dp){ if(dp.containsKey(num)) return dp.get(num); if(num%2==0) dp.put(num, getPowerValue(num/2, dp)+1); else dp.put(num, getPowerValue(num*3+1, dp)+1); return dp.get(num); } } ``` c++ ```cpp= class Solution { public: int getKth(int lo, int hi, int k) { map<int, int> map; map.insert({1,0}); vector<pair<int, int>> sorted; for(int i=lo; i<=hi; i++){ int p = powerValue(map, i); sorted.push_back({p, i}); } sort(sorted.begin(), sorted.end()); return sorted[k-1].second; } int powerValue(map<int, int>& map, int num){ int ans = 0; if(map.find(num)!=map.end()) return map[num]; if(num%2==0) ans = powerValue(map, num/2)+1; else ans = powerValue(map, num*3+1)+1; map.insert({num, ans}); return ans; } }; ```