leetcode 006 ZigZag Conversion

这道题很好做,声明一个二维数组,然后初始化,像题干中给的那样把值放入数组,然后再把二维数组降阶存即可。
但是我还是踩坑了。
1.当s.length() < numRow 的时候,此时只有一列,所以直接返回s即可。
比如他给我的案例是 s = "A",numRow = 2;结果应为A,我的是"\u0000",eclipse显示空格。所以要加上这个判断。
2.当numRow <=1 的时候,此时只有一行,所以直接返回s即可。
3.注意是“之字形的排列”,zigzag pattern。
剩下的就好做啦。

以下是我的代码:

class Solution {
    public String convert(String s, int numRows) {
        if( s == ""|| s.length() <= numRows || numRows <= 1)
			return s;
		char cs[] = s.toCharArray();
		
		int xiexian = numRows - 2;
		int hang = 0;
		
		/*算行数*/
		for( int i = s.length(); i > 0;  ){
			i -= numRows;
			hang++;
			for( int j = 0; j < xiexian && i > 0; j++){
				hang++;
				i--;
			}
		}
		/*二维数组初始化*/
		char[][] c= new char[hang][numRows];
		for( int i = 0; i < hang; i++)
			for( int  j = 0; j < numRows; j++)
				c[i][j] = ' ';
		/*二维数组添加元素*/
		int count = 0;
		for( int i = 0; i < hang; ){
			/*竖线*/
			for( int j = 0; j < numRows && count < s.length(); j++){
				c[i][j] = cs[count];
				count++;
			}
			/*斜线*/
			i++;
			for( int j = numRows - 2; j > 0 && count < s.length(); j--){
				c[i][j] = cs[count];
				count++;
				i++;
			}
		}
		/*二维数组转化为字符串*/
		char ans[] = new char[s.length()];
		int anc = 0; 
		for( int j = 0; j < numRows; j++){
			for( int i = 0; i < hang; i++){
				if( c[i][j] != ' '){
					ans[anc] = c[i][j];
					anc++;
				}
			}
		}
		String d = "";
		for( int  i =0; i < s.length(); i++){
			d += ans[i];
		}
		return d;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值