leetcode6 zigzagConversion

本文介绍了一种将字符串按斜三角形式重新排列的方法,并提供了一个C++实现方案。通过对字符串进行特定行数的斜三角变换,文章详细解释了如何通过遍历原始字符串并根据变换规则将其字符分配到不同的行中,最终再将这些行合并成新的字符串。

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


题意:一个字符串按照斜三角方式变换

比如ABCDEFGHIJKLMNOPQR,按4行变换,则变成

A           G             M

B      F  H       L    N           R

C   E     I   K         O     Q

D          J               P

变换完之后再横向取字符串,即变成了AGMBFHLNRCEIKOQDJP


思路:

按照上面的例子,弄string数组str[4],一个string对应一行

从原串的第一个开始遍历,其字符所在行(row)从0变到3,接着又从3变到0

所以每次按照字符所在行,添加到对应行的string中

最后再把4个string合起来即可


PS:注意考虑只有一行的情况,那么row在遍历过程中不需要进行变化!




class Solution {
public:
string convert(string s, int numRows)
 {
        string *str;
        int now_row=0,flag=0,i,len;
        str=new string[numRows];
        len=s.length();
        for(i=0;i<len;i++)
        {
            str[now_row]+=s[i];

			if(numRows!=1)
			{
				if(flag==0)
					now_row++;
				else now_row--;
            
				if(now_row==0)
					flag=0;
				else if(now_row==numRows-1)
					flag=1;
			}
        }
        for(i=1;i<numRows;i++)
            str[0]+=str[i];
        return str[0];
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值