6. ZigZag Conversion

1,题目意思

这个题看了几分钟,还是没有理解题目意思.....(太菜了)

百度网上的相关教程,https://www.jianshu.com/p/8b83c6a2eff8(个人认为可以称得上很经典的教程了)

给定一个字符串,使之按照倒N字形排列,然后返回一个(按行)顺序读的字符串。

 

按照图中所示,我们目前拿数组下标来表示数据,而且整个题目都会以数组下标作为关键。那我们的核心就是创建一个String,直接从源字符串取数据进行append,像是一种没有进行zigzag排序,直接进行合理的字符串选取.

numRows = 4
0  --- 6  间隔6  (i = 0)
1 --- 5   间隔4  (i =  1)
2 --- 4   间隔2  (i =  2)
3 --- 3   间隔0  (i =  3)

即找规律:将N分为正v和倒v。(其中i为行数下标)

对于正v,间隔为2(numRows-i-1)(numRows>1)

对于倒v,间隔为2i

注意:每个字符只取一次,即当i=0和i=numRows-1时,仅需考虑取正v和倒v中的一个即可。

边界问题:

numRows <= 1的情况,直接返回

s.size()==0 ,直接返回

string convert(string s, int numRows) {
        if (s.size() == 0 || numRows <= 1)
		return s;
	string s1 = "";
	int index = 0;
	for (int i = 0; i < numRows; i++) {
		index = i;
		while (index < s.size()) {
			s1 += s[index];
			index += 2 * (numRows - i - 1);
			if (i!=0&&i!=numRows-1&&index < s.size())
			{
				s1 += s[index];
			}
			index += 2 * i;
		}
	}
	return s1;
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值