手写next_permutation,需要的可以参考一下:
class Solution {
public:
vector<int> f;
int n;
int lowbit(int x){
return x&-x;
}
int query(int x){
int ans=0;
for (int i=x;i;i-=lowbit(i)) ans+=f[i];
return ans;
}
void add(int x,int c){
for (int i=x;i<=n;i+=lowbit(i)) f[i]+=c;
}
int getMinSwaps(string num, int k) {
vector<queue<int>> arr(10);
n=num.size();
for (int i=0;i<n;i++)
arr[num[i]-'0'].push(i+1);
string bef=num;
while (k--){
int i=n-2;
while (i>=0 && num[i]>=num[i+1]) i--;
int j=n-1;
while (num[j]<=num[i]) j--;
swap(num[i],num[j]);
for (int start=i+1,end=n-1;start<end;start++,end--) swap(num[start],num[end]);
}
f.resize(n+1);
int ans=0;
for (char &c:num){
int pos=arr[c-'0'].front();arr[c-'0'].pop();
ans+=query(n)-query(pos);
add(pos,1);
}
return ans;
}
};