欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Z 字形变换

程序员文章站 2022-03-25 16:24:07
题目要求:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 今天的题目是一道模拟题,直接对目标情况进行模拟即可,虽然是两层循环嵌套,但是实际时间复杂度为O(n)。代码如下: #include #include #include

题目要求:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 z 字形排列。

今天的题目是一道模拟题,直接对目标情况进行模拟即可,虽然是两层循环嵌套,但是实际时间复杂度为o(n)。代码如下:

#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string convert(string s, int numrows);
int main()
{
    string s;
    cin >> s;
    int num;
    cin >> num;
    cout << convert(s,num);
    return 0;
}

string convert(string s, int numrows) 
{
    if (numrows == 1)
        return s;
    string ans = s;
    int len = s.length();
    int index = 0;
    for (int j = 0; j < numrows; ++j)
    {
        int i = 0;
        while( i < (len / (numrows * 2 - 2) + 1) && (i * (numrows * 2 - 2) + j) < len)
        {
            if (j == 0 || j == numrows - 1)
            {
                ans[index] = s[i * (numrows * 2 - 2) + j];
                index++;
            }
            else
            {
                ans[index] = s[i * (numrows * 2 - 2) + j];
                index++;
                if(((i + 1) * (numrows * 2 - 2) - j) < len)
                {
                    ans[index] = s[(i + 1) * (numrows * 2 - 2) - j];
                    index++;
                }
            }
            ++i;
        }
    }
    return ans;
}