LeetCode ZigZag Conversion

1170 ワード

リンク:https://oj.leetcode.com/problems/zigzag-conversion/
文字列を次のように並べる
A
 
 
G
 
 
M
B
 
F
H
 
L
N
C
E
 
I
K
 
:
D
 
 
J
 
 
:
出力行順:AGMBFHLNCEIKDJ
あとは文字の座標で文字列の位置を計算します
class Solution
{
	public:
		string convert(string s,int nRows)
		{
			string ans;
			if(s.empty())
			    return ans;
			if(nRows==1)
				return s;
			int n=nRows*2-2;
			int tem=s.length()%n;
			int ncols=(s.length()/n)*2;
			if(tem>=nRows)
				ncols+=2;                           //       
			if(tem<nRows&&tem!=0)
				ncols+=1;
			if(s.length()<=nRows)
				return s;

			for(int i=0;i<nRows;i++)
			{
				for(int j=0;j<ncols;j++)
				{
					if((i==0||i==nRows-1)&&j%2==1)					//    ,  
						continue;
					if(j%2==1)
					{
						tem=(j-1)/2*n+nRows-1+(nRows-2)-i+1;
						if(tem>=s.length())
							continue;
						ans+=s[tem];
					}
					else
					{
						tem=j/2*n+i;
						if(tem>=s.length())
							continue;
						ans+=s[tem];

					}
				}
			}
			return ans;

		}
};