欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[LeetCode]ZigZag Conversion

发布时间:2025/7/14 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [LeetCode]ZigZag Conversion 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目:ZigZag Conversion

一串字符按照Z字形的数组给了我们,要求转成原本的顺序。

思路:

统计“|/”的个数;

竖着的和斜着的下标有对应关系;

竖着的:k = j*(2*numRows - 2) + i;

斜着的(不含两个端点):k = (j + 1)*(2*numRows - 2) - i;

注意:可能会有残缺的部分。

/****************************************************************** 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". ******************************************************************/ #include <stdio.h> #include <memory.h>char* convert(char* s, int numRows) {int length = strlen(s);printf("%d\n",length);if(length <= numRows || numRows <= 1)return s;int zn = length/(2*numRows - 2);//Z字形竖着放时,最开始的一竖和一撇的组合整体的个数int sn = length%(2*numRows - 2);//Z字形竖着放时,剩下残缺的组合的字母个数char *cs = (char *)malloc((length + 1)*sizeof(char));memset(cs,0,(length + 1)*sizeof(char));int index = 0,k = 0;for (int i = 0;i < numRows;i++){//完整组合的对应转换for(int j = 0;j < zn;j++){//竖线上的点坐标对应公式k = j*(2*numRows - 2) + i;cs[index++] = s[k];if(i > 0 && i < numRows - 1){//斜线上的不含两端点的点坐标对应公式k = (j + 1)*(2*numRows - 2) - i;cs[index++] = s[k];}}if(sn > i){//残缺组合的对应转换k = zn*(2*numRows - 2) + i;cs[index++] = s[k];if(i > 0 && i < numRows - 1 && sn > 2*numRows - 2 - i){k = (zn + 1)*(2*numRows - 2) - i;cs[index++] = s[k];}}}return cs; }void main(){char s[] = "Apalindromeisaword,phrase,number,orothersequenceofunitsthatcanbereadthesamewayineitherdirection,withgeneralallowancesforadjustmentstopunctuationandworddividers.";char *cs = convert(s,2);printf("%s\n",cs);free(cs); }

 

转载于:https://www.cnblogs.com/yeqluofwupheng/p/6679118.html

总结

以上是生活随笔为你收集整理的[LeetCode]ZigZag Conversion的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。