Leetcode Z字形变换

Z字形变换

题目描述:

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

题目链接

class Solution {
public:
    string convert(string s, int numRows) {
        char str[numRows][s.length()];
       	memset(str,0,sizeof(str));
        int count[numRows];
        memset(count,0,sizeof(count));
        int time = 0;
        for(int i = 0 ; i<s.length() ;){
            if(time == 0){ // 从上往下开始 
                while(time < numRows && i < s.length() ){
                    str[time][count[time]++] = s[i];
                    time ++ ;
                    i++; // 这里的i也需要变化 
                }
            }else if(time == numRows){ // 从下往上开始  
            	time -= 2; // 从倒数第二个开始 
                while(time > 0 && i < s.length() ){
                    str[time][count[time]++] = s[i];
                    time--;
                    i++; // 这里的i也需要变化 
                }
                if(time < 0) time ++; // 特殊判断numRows为1的情况 
            }
        }
        string result = "";
        for(int i = 0  ;i<numRows ; i++){
            for(int j = 0 ; j<s.length() ; j++){
             	if(int(str[i][j])){
					result += str[i][j]; 	
				} 
            }
        }
        return result;
    }
};

首先按照从上往下依次放入数组中,然后再次从下往上放入。利用一个numRows行的数组记录二维数组的最后位置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值