[LeetCode]ZigZag Conversion

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".

思考:画图,找出间隔规律。

class Solution {
public:
    string convert(string s, int nRows) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.    
		int len=s.length();
		string s1(len,'a');
		int gap=2*nRows-2;
		int i,j,k;
	    i=0;//s1下标
		j=0;//行
		int index=0;//对应s下标
		if(nRows==1) return s;
		while(i<len)
		{
			index=j;		
			if(j==0||j==(nRows-1))
			{				
				while(index<len)
				{
					s1[i]=s[index];
					index+=gap;					
					i++;
				}
			}
			else
			{
				s1[i]=s[index];			
				while(index<len) /*内部也要判断*/
				{
					i++;
					index+=gap-2*j;
					if(index>=len) break;	
					s1[i]=s[index];
					i++;
					index+=2*j;
					if(index>=len) break;	
					s1[i]=s[index];
				}			
			}
			j++;
		}
		return s1;
    }
};

      当不满足while条件时,还要运行完while语句才会跳出循环。在此mark,祭奠我像傻子一样的一个小时。

posted @ 2013-11-07 01:29  七年之后  阅读(226)  评论(0编辑  收藏  举报