leetcode中zigzag实现;

本文介绍了一种将字符串以ZigZag形式排列并按行读取的算法实现。通过示例说明了如何将“PAYPALISHIRING”字符串以特定的行数进行ZigZag排列,并提供了一段C语言代码实现该转换。

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

6. ZigZag Conversion

 

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)

P   A   H   N
A P L S I I G
Y   I   R
And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

在这个地方,leetcode也只是举了一个例子,如果有对zigzag不熟悉的,可以自己去百度资料看一下,这里我想说的是,我们的每一行每两个字符间隔的宽度是和总共的字符的行数有关的,话不多说,还是直接贴代码

char* convert(char* s, int numRows) {
   int n=strlen(s);
   int i,j,step,k,temp;
   char *st;
   if(numRows<=1||n<numRows)
   return s;
   step=(numRows-1)*2;
   st=malloc(sizeof(char)*(n+1));
   st[n]='\0';
   for(i=k=0;i<numRows;i++){
       temp=(numRows-i-1)*2;
       for(j=i;j<n;j+=step){
           st[k++]=s[j]
            if( i > 0 && i < numRows - 1 && j + temp < n )
            st[k++] = s[j+temp];
       }
   }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值