开发者社区> Cool架构> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Cool说丨力扣6

简介: 6. Z 字形变换
+关注继续查看


6. Z 字形变换

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

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R

E T O E S I I G

E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3

输出: "LCIRETOESIIGEDHN"

示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4

输出: "LDREOEIIECIHNTSG"

解释:

L     D     R

E   O E   I I

E C   I H   N

T     S     G

第一版,学到了,好厉害

执行用时 :20 ms, 在所有 cpp 提交中击败了45.59%的用户

内存消耗 :12.7 MB, 在所有 cpp 提交中击败了78.87%的用户

   string convert(string s, int numRows) {

    if (numRows == 1) return s;

    vector<string> rows(min(numRows, int(s.size()))); // 防止s的长度小于行数

    int curRow = 0;

    bool goingDown = false;

    for (char c : s) {

        rows[curRow] += c;

        if (curRow == 0 || curRow == numRows - 1) {// 当前行curRow为0或numRows -1时,箭头发生反向转折

            goingDown = !goingDown;

        }

        curRow += goingDown ? 1 : -1;

    }

    string res;

    for (string row : rows) {// 从上到下遍历行

        res += row;

    }

    return res;

        

   }

第二版,时间稍微改进一点

执行用时 :16 ms, 在所有 cpp 提交中击败了65.56%的用户

内存消耗 :12.7 MB, 在所有 cpp 提交中击败了77.96%的用户

string convert(string s, int numRows) {

    if (numRows == 1) return s;

    vector<string> rows(min(numRows, int(s.size()))); // 防止s的长度小于行数

    int curRow = 0;

    bool goingDown = false;

    for (char &c : s) {

        rows[curRow] += c;

        if (curRow == 0 || curRow == numRows - 1) {// 当前行curRow为0或numRows -1时,箭头发生反向转折

            goingDown = !goingDown;

        }

        curRow += goingDown ? 1 : -1;

    }

    string res;

    for (string &row : rows) {// 从上到下遍历行

        res += row;

    }

    return res;

}


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Cool说丨力扣153、454
153. 寻找旋转排序数组中的最小值 454. 四数相加 II
0 0
Cool说丨力扣205
[205. 同构字符串](https://leetcode-cn.com/problems/isomorphic-strings/)
0 0
Cool说丨力扣367
367. 有效的完全平方数
0 0
Cool说丨力扣69
[69. x 的平方根](https://leetcode-cn.com/problems/sqrtx/)
0 0
Cool说丨力扣215、380
[215. 数组中的第K个最大元素](https://leetcode-cn.com/problems/kth-largest-element-in-an-array/) [380. 常数时间插入、删除和获取随机元素](https://leetcode-cn.com/problems/insert-delete-getrandom-o1/)
0 0
Cool说丨力扣287/792/378
关注博主,获取更多知识
0 0
Cool说丨力扣1128
1128. 等价多米诺骨牌对的数量
0 0
Cool说丨力扣989
989. 数组形式的整数加法
0 0
Cool说丨力扣13
[13. 罗马数字转整数](https://leetcode-cn.com/problems/roman-to-integer/)
0 0
Cool说丨力扣724与941
724. 寻找数组的中心索引 941. 有效的山脉数组
0 0
+关注
Cool架构
大三在读,两次国奖,竞赛生。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载