2014-10-17

昨天帮老师搬办公室,然后就荒废了一天。罪过最过。主要是因为自己又放松了警惕。

早上把前天晚上留下的letcodetime给解决了。

竟然用了一个小时,easy的。!!!

如果是放在面试的话是妥妥被刷的节奏。

上题目

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   N
A P L S I I G
Y   I   R
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

题目的意思是把字符串竖着排下来,然后横着读过去。一开始没读懂,直接百度了题目的意思····

解题过程中主要还是边界问题。

因为当在波峰或者波谷的时候,每次要跨越两个对称轴,跟其他的元素不一样,所以要分开处理。

我就是在这个波峰和波谷的位置计算上面折腾太久了。

自己做出来后,看了网上其他人的答案,处理的方式都是一样的,要对波峰波谷分开处理。

没办法,脑袋瓜要开始训练了,不然去不了梦寐以求的公司啊。


上CODE。

import java.*;

public class zigzag_convertion {
	public String convert(String s, int nRows) {
		String answer = "";
		if (nRows == 1)
			return s;
		for (int i = 0; i < nRows; ++i) {

			for (int j = i, time = 1; j < s.length();) {

				answer += s.substring(j, j + 1);
				if (i == 0 || i == nRows - 1)//在波峰或者波谷的时候,每次位置跨越两个对称轴
					j = j+(nRows-1) * 2;
				else {//其他位置的时候只要跨越一个对称轴
					
						j = j + ((nRows - 1) * time - j) * 2;
						time++;
					
				}
				
			}
			// System.out.print(answer+'\n');
		}
		return answer;
	}

	public static void main(String[] args) {
		System.out.print(new zigzag_convertion().convert("abcdef", 3));
<span style="white-space:pre">		</span>//时间空间复杂度是O(n),有没有可能把空间复杂度减少到O(1)呢?
<span style="white-space:pre">	</span>}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值