题解 | 小红的排列构造②

小红的排列构造②

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的题解专栏,里面包含的题目都是十分典型的经典题目。

全部评论

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务