leetcode6
2015-09-24 16:12
113 查看
ZigZag Conversion
多画几个图就明白了。
比如给定输入为:abcdef 3
则输出的Z形图为:
a e
b d f
c
若给定输入为:abcdef 4
则输出的图形为:
a
b f
c e
d
总之就是一个向下走的Z字形
而最终要得到返回的结果串,则是,从上到下,从左到右将Z形图的字符添加到string中
比如,第一种情况结果为 aebdfc
第二种情况:abfced
思路:
找规律,其实跟高中的等差数列相似,公差是2 * n - 2 ,n是行数,也就是给定输入的第二个参数。
注意考虑首尾 和 特殊 情况,这些在提交的时候就会发现。
代码:
多画几个图就明白了。
比如给定输入为:abcdef 3
则输出的Z形图为:
a e
b d f
c
若给定输入为:abcdef 4
则输出的图形为:
a
b f
c e
d
总之就是一个向下走的Z字形
而最终要得到返回的结果串,则是,从上到下,从左到右将Z形图的字符添加到string中
比如,第一种情况结果为 aebdfc
第二种情况:abfced
思路:
找规律,其实跟高中的等差数列相似,公差是2 * n - 2 ,n是行数,也就是给定输入的第二个参数。
注意考虑首尾 和 特殊 情况,这些在提交的时候就会发现。
代码:
class Solution { public: string convert(string s, int numRows) { //n-2 int i; int j; int diff = 2*numRows - 2; string result=""; if(numRows > 1 && s.length()>numRows) { for(i = 0;i<numRows;i++) { for(j=i;j<s.length();j+=diff) { result=result+s[j];//首尾 if(i>0 &&i!=numRows-1) { int k = j-2*i+diff; if(k<s.length())//!!!! { result = result + s[k]; } } } } } else { for(int i = 0 ;i<s.length(); i++) { result= result+s[i]; } } //result+='\0'; return result; } };
相关文章推荐
- ADS2009U1安装破解步骤及文件下载地址(亲测XP_WIN7成功)
- 白话经典算法系列之二 直接插入排序的三种实现
- PIC24FJ64GB002 with bluetooth USB dongle
- PLSQL Developer常用设置及快捷键
- SVN
- JS设计模式-单例模式
- 面试问题集锦
- POJ 2031:Building a Space Station 最小生成树
- 注册表reg文件编写
- iOS多线程学习---线程同步
- MyBatis返回主键,MyBatis Insert操作返回主键
- 介绍一种android的裸刷机方法(fastboot刷机实质)
- Windows 10问题
- POJ 2031:Building a Space Station 最小生成树
- js判断页面出现滚动条
- hive升级测试记录
- jz2440的中断处理流程
- 这些基础却重要的面向对象概念,你还记得多少
- EIRGP配置实验
- Eclipse+NDK+adt+cdt开发环境问题解决