博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]ZigZag Conversion
阅读量:6069 次
发布时间:2019-06-20

本文共 2145 字,大约阅读时间需要 7 分钟。

题目:ZigZag Conversion

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

思路:

统计“|/”的个数;

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

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

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

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

/******************************************************************ZigZag ConversionThe 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   NA P L S I I GY   I   RAnd 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 
#include
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

你可能感兴趣的文章
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
dom4j解析xml文件
查看>>
第六周
查看>>
斯坦福大学公开课机器学习:梯度下降运算的学习率a(gradient descent in practice 2:learning rate alpha)...
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>