题解 | 小红的排列构造②
小红的排列构造②
https://www.nowcoder.com/practice/a4ec29e74aaa450aa8a4200fe3b06308
只需要先生成一个正序排列,然后在每次遇到'0'时,将当前位置数字与后面那个交换位置即可,特判末尾有0,因为到最后一定包含了从1到n的所有数字。
#include <vector>
#include <string>
#include <iostream>
#include <numeric>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
string s;
cin >> s;if (s[n-1] == '0') {cout<<-1;return 0;}
vector<int>v(n);iota(v.begin(),v.end(),1);
for (int i = 0; i < n; i++) {
if (s[i] == '0')
swap(v[i],v[i+1]);
}
for (int x:v)cout<<x<<' ';
return 0;
}
RogeAustine题解系列 文章被收录于专栏
这里是RogeAustine的题解专栏,里面包含的题目都是十分典型的经典题目。


