Z 字形变换

题目:

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

思路: 通过计算 当 i/(numRows-1) 为偶数时 竖着存储字符, 当为奇数时 沿斜向右上存储。而每次存储的位置由 i%(numRows-1)来决定

class Solution {
public:
    string convert(string s, int numRows) {
            string ret;
            if(s == ""|| numRows<1) return ret;
            int len = s.size();
            if(numRows ==1) return s;
            vector<string>temp(numRows);
            for(int i = 0; i< len; i++){
                int rows = i / (numRows-1); // 选列
                int cols = i % (numRows-1); // 列之间元素个数
                if(rows % 2 == 0){ // 正序竖着向下存入字符
                    temp[cols].push_back(s[i]);
                }else{ // 斜着存储字符 
                    temp[numRows-cols-1].push_back(s[i]); // 这样可以做到图那个样子
                }
            }
            for(int i = 0; i< temp.size(); i++){
                ret += temp[i];
            }
            return ret;
    }
};

Z 字形变换_第1张图片
欢迎各位前来观看, 如果有更好的思路, 欢迎在下方评论区留言 谢谢。♥

你可能感兴趣的:(leetcode,c++,字符串)