<6>——ZigZag Conversion

xiaoxiao2021-02-28  108

六、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; } };
转载请注明原文地址: https://www.6miu.com/read-50599.html

最新回复(0)