题目:
代码:
bool cmp(pair<int,int> &a,pair<int,int> &b){
if(a.second == b.second) return a.first < b.first;
return a.second < b.second;
}
int f(long long k)
{
if(k==1) return 0;
if(k%2==1){
k=k*3+1;
}
else {
k=k/2;
}
return f(k)+1;
}
int main()
{
int lo;
int hi;
int k;
vector<pair<int,int> > vp;
for(int i=lo;i<=hi;i++)
{
pair<int,int> pp;
pp.first=i;
pp.second=f(i);
vp.push_back(pp);
}
sort(vp.begin(),vp.end(),cmp);
return vp[k-1].second;
}
python代码:
class Solution:
def getKth(self, lo: int, hi: int, k: int) -> int:
def getF(x):
if x == 1:
return 0
return (getF(x * 3 + 1) if x % 2 == 1 else getF(x // 2)) + 1
v = list(range(lo, hi + 1))
v.sort(key=lambda x: (getF(x), x))
return v[k - 1]
解释:
1.python允许函数嵌套。
2。函数后面的->类型,表明我返回的类型。
3。**sort的使用:**排序时,先看元组的一个,再看第二个。