Leetcode 6 ZigZag Conversion

1. 问题描述

  给定一个字符串和一个行数,表示按照zigzag的方式扫描的结果,编写算法输出按行扫描的结果。
  que


2. 方法与思路

  首先要先明白zigzag的顺序,
  
  zigzag
  
  明白了zigzag扫描后,要确定zigzag中字符和按行扫描字符的对应关系。有两点:
  1). 每行中的列元素都会有对应的间隔span = 2row2 ,例如行为4的zigzag扫描中,[1,7,13], [2,8,14]间隔为 242=6
  2). 中间行每一个span前还会有一个元素,间隔为 span2rowi
  

class Solution {
public:
    string convert(string s, int numRows) {
        int i,j;
        string str="";

        if(s.length() == 0) return "";
        if(numRows == 1) return s;

        int span = 2*numRows-2;        
        for(int i = 0; i <numRows; i++)
        {
            j = i;

            while(j < s.length())
            {       
                str = str+s[j];

                j += span;
                if(i != 0 && i != numRows-1)
                    if(j-2*i < s.length()) str = str + s[j - 2*i];  

            }  //cout<<"i:"<<i<<"str:"<<str<<endl;
        }

        return str;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值