LeetCode: 第六题Z字形变换--C++

题意:
将字符串 "PAYPALISHIRING"以Z字形排列成给定的行数:numRows=3


思路:
1.当空字符或者只有一个字符的时候直接输出字符;

2. P    A   H   N  按如图所示的颜色将字符分组,每一组字符长度num1=numRows*2-2
   A P L S I   I G                                                  总共可以分几组num=s.size()/num1或者num=s.size()/num1+1
   Y     I     R

3.按规律输出字符

代码如下:
class Solution {
public: string convert(string s, int numRows) {
    string result;
    int num1 = numRows * 2 - 2;
    if(s.size()<2||num1==0){
         result=s;
         return result;
    }
    int num = (s.size() / num1)+1;
    if(s.size()%num1==0) num = (s.size() / num1);
    string str[100];
    int count = 0;
    int i = 0;
    for (int j = 0; j < s.size(); j++){
        if (count == num1){
            i++;
            count = 0;
        }
        str[i].push_back(s[j]);
        count++;
    }//存储num组的字符,就是按照上述颜色分类存入过渡数组
        //按规律输出字符
    for (int n = 0; n < num; n++) {
        result.push_back(str[n][0]);
     }
    for (int m = 1; m < numRows; m++){
        for (int n = 0; n < num; n++) {
            if (m < str[n].size()) result.push_back(str[n][m]);
            if ((num1 - m) < str[n].size() && m != (num1 - m)) result.push_back(str[n][num1 - m]);
        }
    }
     return result;
   }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值