<6>——ZigZag Conversion
来源:互联网 发布:c语言计算排列组合 编辑:程序博客网 时间:2024/06/05 16:19
六、ZigZag Conversion
锯齿变换
题目大意:输入一个字符串和int型(锯齿层数)
将字符串以锯齿变化重新排序
例:
“HAIZEIKEJILAOCHUANZHANG",numRows=5
通过如下形式转换:
ret="HJAAEIUNIKLHZGZIACHNEOA";
解析:
周期:z=n+(n-2);
顶层:每周期第一个元素
中间层:
j行左偏差:ld=j;
j行右偏差:rd=z-j;
底层:每周期最后一个元素
我的代码:
class Solution {public: string convert(string s, int numRows) { int N=s.length(); if(N<=numRows||numRows<=1)return s; int z=numRows+numRows-2;//周期长度 string ret=""; for(int i=0;i<N;i+=z)//锯齿顶层 ret+=s[i]; for(int j=1;j<numRows-1;j++)//中间层 for(int t=0;t<N;t+=z) { if(t+j<N)ret+=s[t+j];//左偏差为j if(t+z-j<N)ret+=s[t+z-j];//右偏差为i } for(int i=numRows-1;i<N;i+=z)//锯齿底层 ret+=s[i]; return ret; }};经典代码:
class Solution {public: string convert(string s, int numRows) { string result=""; if(numRows==1)return s; int step1,step2; int len=s.size(); for(int i=0;i<numRows;++i){ step1=(numRows-i-1)*2; step2=(i)*2; int pos=i; if(pos<len) result+=s.at(pos); while(1){ pos+=step1; if(pos>=len) break;if(step1)result+=s.at(pos); pos+=step2; if(pos>=len) break;if(step2)result+=s.at(pos); } } return result; }};
阅读全文
0 0
- <6>——ZigZag Conversion
- LeetCode6—ZigZag Conversion
- leetcode—zigzag conversion
- LeetCode题解——6ZigZag Conversion
- #6 LeetCode——ZigZag Conversion
- LeetCode——ZigZag Conversion
- leetcode——ZigZag Conversion
- LeetCode6——ZigZag Conversion
- String——zigzag-conversion
- ZigZag Conversion —— leetcode
- Leetcode6——ZigZag Conversion
- leetcode——6——ZigZag Conversion
- leetcode第6题——*ZigZag Conversion
- 【LeetCode】LeetCode——第6题:ZigZag Conversion
- 刷LeetCode(6)——ZigZag Conversion
- 【python】【leetcode】【算法题目6—ZigZag Conversion】
- leetcode 006 —— ZigZag Conversion
- LeetCodeOJ——6. ZigZag Conversion
- 聚类分析的典型应用和技术
- ROS 资源名字规范
- PP代码生成器(二) 解决方案, 生成任务, 辅助设计面板
- 欢迎使用CSDN-markdown编辑器
- 个人练习题库(个人保存)
- <6>——ZigZag Conversion
- tensorflow进行MNIST手写数字识别-优化版
- 斐波那契数列
- 2016年总结-Java程序员
- [LintCode]7.二叉树的序列化和反序列化
- HDU
- 关于广度优先遍历(Breadth First Search)的提纲性内容
- 关于设计模式
- mybaists 一对多理解