leetcode 6 -- ZigZag Conversion

本文介绍了一种将字符串以Z字形排列,并按行读取重构的方法。通过分析锯齿形排列规律,提供了C语言实现代码,适用于字符串长度大于行数的情况。

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

题目

The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

题意

将字符串按照锯齿形(N字形)排列,然后把从上到下把所有行按从做到右的顺序组成新的字符串
ps:其实我刚开始也把题意理解错了,wr了好几次,于是乎去学长博客取经后才理解。

    关于锯齿形解释如下:

            1---------------7
            2---------6----8------------12
            3----5---------9------11
            4--------------10

大概就是这个重组模式,不要嫌弃描述太抽象,图片上传不上来,空格显示不出来,我也无奈

思路

分两个部分,一是最顶行和最底行,二是中间,分别对两个部分找规律了

代码

char* convert(char* s, int numRows) {
    char *a=(char*)malloc(sizeof(char)*(strlen(s)+1));
    int i,j,l,k=0,num=numRows*2-2;
    if(strlen(s)<=numRows || numRows==1)
    {
        return s;
    }
    for(i=0;i<numRows;i++)
    {
        if(i==0 || i==numRows-1)
        {
            j=i;
            while(j<strlen(s))
            {
                a[k++]=s[j];
                j+=num;
            }
        }
        else
        {
            j=i;
            l=num-i;
            while(j<strlen(s) || l<strlen(s))
            {
                if(j<strlen(s))
                {
                    a[k++]=s[j];
                    j+=num;
                }
                if(l<strlen(s))
                {
                    a[k++]=s[l];
                    l+=num;
                }               
            }
        }
    }
    a[k]='\0';
    return a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值