输出此字符串序列的第n次传递

use*_*335 5 string algorithm bit-manipulation c++14

您有一个由字符“ 0”和“ 1”组成的字符串。考虑该序列为“ 01011010”。如果0后跟1,则交换0和1的位置。输出序列的第n个遍。

  • 通行证1:'10101100'
  • 密码2:“ 11010100”
  • 通行证3:'11101000'
  • 通行证4:“ 11110000”

这似乎是修改后的冒泡排序,我们需要输出第n个通过。我的算法:

while (pass != 0)
    begin
        bool x = false;
        int prev = ?;
        for (int i = 0; i < string_length; i++)
        begin
            if (prev == 0) then
                switch (string[i])
                    case 0:
                        break;
                    case 1:
                        string[i] = 0;
                        string[i-1] = 1;
                        prev = ?;
                        x = true;
                        break;
            else
                prev = string[i];
            end if
        end
        if (!x) 
            break;
        pass = pass - 1;

    end
Run Code Online (Sandbox Code Playgroud)

输出正确,但是算法效率不高。最坏的情况仍然是O(n ^ 2)。有人可以帮助我减少时间复杂度吗?

谢谢!