LeetCode6. ZigZag Conversion

本文解析了LeetCode上Zigzag Conversion问题,通过实例详细介绍了如何将输入字符串以Z形方式排列并重新读取。提供了C++实现代码,利用二维数组进行中间存储,最终拼接成结果字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:

https://leetcode.com/problems/zigzag-conversion/

题目描述

将字符串,循环对角化,在输出。

比如:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20循环对角化成之字型。

0               8               16           
1           7   9           15  17           
2       6       10      14      18           
3   5           11  13          19           
4               12              20           
)
分析:

开始真的没读懂题目什么意思,zizag?

感谢

http://www.cnblogs.com/sanghai/p/3632528.html

不知道到在哪看的说用中间数组会超时………哪有嘛。
用一个二维数组,用一个j控制对应行,把字符串中循环对角化后的字符,放入中间数组对应行下。从j=0到j=numsRow-1再到j=0循环,i控制字符串下标,一直向前走。

代码:
class Solution {
public:
    string convert(string s, int numRows) {
        int len=s.size();
        if(len<=1 || numRows<=1){
            return s;
        }
        string tmp[numRows];
        int i=0;
        while(i<len){
            for(int j=0;i<len && j<numRows;j++){
                tmp[j]+=s[i++];
            }
            for(int j=numRows-2;i<len && j>0;j--){
                tmp[j]+=s[i++];
            }
        }
        string result="";
        for(int j=0;j<numRows;j++){
            result+=tmp[j];
        }
        return result;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值