leetcode每日刷题计划--day60

Num 6 Z字形变换

注意点:

  1、空和1需要特判

  2、斜着的是反的,越往上编号越大

  3、可能会出现long和short不满的情况,每行写的时候注意,要带着判断

  4、longs和shorts分别代表竖行和横行数数量

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows==1) return s;
        int len=s.length();
        int longs,shorts;
        int temp=len%(2*numRows-2);
        //cout<<"temp:"<<temp<<endl;
        if(temp<=numRows)
        {
            if(temp==0)
            {
                longs=len/(2*numRows-2);
                shorts=len/(2*numRows-2);
            }
            else
            {
                longs=len/(2*numRows-2)+1;
                shorts=len/(2*numRows-2);
            }
        }
        else{
            longs=len/(2*numRows-2)+1;
            shorts=len/(2*numRows-2)+1;
        }
        //cout<<"longs:"<<longs<<"shorts:"<<shorts<<endl;
        string ans;
        for(int i=0;i<numRows;i++)
        {
            if(i==0||i==numRows-1){
                for(int j=0;j<longs;j++)
                {
                    if(((2*numRows-2)*j+i)<len)
                    ans.push_back(s[(2*numRows-2)*j+i]);
                }
            }
            else
            {
                for(int j=0;j<longs;j++)
                {
                    //cout<<"J:"<<j<<" "<<s[(2*numRows-2)*j+i]<<endl;
                    if(((2*numRows-2)*j+i)<len)
                        ans.push_back(s[(2*numRows-2)*j+i]);
                    if(j<shorts && ((2*numRows-2)*j+(2*numRows-i-2))<len)
                        ans.push_back(s[(2*numRows-2)*j+(2*numRows-i-2)]);
                }
            }
        }
        return ans;
    }
};
View Code

 这个题还有一个方法是每一行开一个数组,然后根据遍历加内容,看了一下应该不如现在的方法,不写了。

时间才能证明一切,选好了就尽力去做吧!
原文地址:https://www.cnblogs.com/tingxilin/p/11927620.html