只需要先生成一个正序排列,然后在每次遇到'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;
}

京公网安备 11010502036488号