[LeetCode]#6 ZigZag Conversion
2015-12-30 22:21
288 查看
GitHub : https://github.com/MummyDing/LeetCode
Source : https://leetcode.com/problems/zigzag-conversion/
Description :
The string
this: (you may want to display this pattern in a fixed font for better legibility)
And then read line by line:
Write the code that will take a string and make this conversion given a number of rows:
return
题解: 总算有个1A了,不过也debug好久. 题目的意思是给定一个字符串,你需要以蛇形排列成锯齿图形.其实这就是一道找规律的题. 我假设字符串长度为len,需要排列成R行的锯齿图形,那么就有:
------------这里每个数字表示字符对应的下标
根据这个就可以找出规律
1. 第一行和最后一行: 横向递增公差为 2R-2
2. 中间的行:奇数列(列数从0开始标号)与后一行相加之和 = (col*2+2)*(R - 1)
3. 中间的行:偶数列(列数从0开始标号)与后一行相加之和
= (col+1)*(numRows - 1)*2
根据这个几个规律就很容易写代码了.(我谢了一面A4纸...囧...)
【转载请注明出处】
Author: MummyDing
出处:http://blog.csdn.net/u012560612/article/category/6047025
Source : https://leetcode.com/problems/zigzag-conversion/
Description :
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".
题解: 总算有个1A了,不过也debug好久. 题目的意思是给定一个字符串,你需要以蛇形排列成锯齿图形.其实这就是一道找规律的题. 我假设字符串长度为len,需要排列成R行的锯齿图形,那么就有:
------------这里每个数字表示字符对应的下标
根据这个就可以找出规律
1. 第一行和最后一行: 横向递增公差为 2R-2
2. 中间的行:奇数列(列数从0开始标号)与后一行相加之和 = (col*2+2)*(R - 1)
3. 中间的行:偶数列(列数从0开始标号)与后一行相加之和
= (col+1)*(numRows - 1)*2
根据这个几个规律就很容易写代码了.(我谢了一面A4纸...囧...)
/* Problem: ZigZag Conversion Description: https://leetcode.com/problems/zigzag-conversion/ Author: MummyDing Date : 2015-12-30 Run Time: 20 ms */ #include <iostream> using namespace std; class Solution { public: string convert(string s, int numRows) { if(numRows <= 1) return s; string res = ""; int len = s.size(); for(int i=0 ; i<numRows ; i++){ int col = 0 ; for( int j=i ; j<len ; ){ res += s[j]; if( i== 0 || i == numRows-1 ){ j += (2*numRows - 2); }else if(col % 2 == 0){ j = ((col*2+2)*(numRows - 1) -j); }else { j = ((col+1)*(numRows - 1)*2 -j); } col++; } } return res; } }; int main() { //Solution s; //cout<<s.convert("1234567890abcd",6)<<endl; return 0; }
【转载请注明出处】
Author: MummyDing
出处:http://blog.csdn.net/u012560612/article/category/6047025
相关文章推荐
- 电子证书 DER vs. CRT vs. CER vs. PEM
- [python]Win7 X64安装python Scrapy【解决windows c++环境】
- css媒体查询之width
- 多线程下载
- JSP中两种include的区别
- 多行文本溢出显示省略号(...)的方法
- Excel Sheet Column Title 把整数转换为大写字母的组合
- 设计模式:工厂方法模式
- 让html文件也具体include包含的功能
- 二叉搜索树的相关操作
- 如何在RCP程序中添加一个banner栏
- 8行代码教你搞定导航控制器全屏滑动返回效果
- ios:点击tableView中的一个按钮,确定cell所在的行
- HTTPS
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法(转)
- Code Snippets懒人输入
- OC类和对象基本知识
- Oracle 之 for update 与for update skip locked
- 设计模式学习——工厂模式
- Swift -字符串详解