leetcode——z字形变换

题目:

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:(下面这样的形状)

P   A   H   N                    //0号数组
A P L S I I G                    //1号数组
Y   I   R                        //2号数组

之后按逐行顺序依次排列:"PAHNAPLSIIGYIR"

 

实现一个将字符串进行指定行数的转换的函数:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) 应当返回 "PAHNAPLSIIGYIR" 。


我的分析:

可以看出,在排列好的图形中,照着z字形读取的话就是字符串的原顺序,于是我们逆向思维考虑,多少行我就用多少个的数组保存,假设有4行,那么原字符串照顺序添加到数组就是

0123210123210123.......

(这里的数字表示的是保存的数组的编号)

之后我们只要照数组的顺序(0 1 2 3)读取里面的字符即可


代码:

public String convert(String s, int numRows) {

     	if(numRows==1)
     		return s;

     	List<Character>[] list=new List[numRows];        //多少行就创建多少个数组
     	for(int i=0;i<numRows;i++){
     		list[i]=new ArrayList<>();
	}
	int temp=0;
     	int temp2=0;
     	int flag=0;
     	while(temp<s.length()){
     	        while(temp<s.length()&&flag!=numRows){
     		        list[flag++].add(s.charAt(temp++));
		}
		flag=numRows-2;
		while(temp<s.length()&&flag!=-1){
			list[flag--].add(s.charAt(temp++));
		}
		flag=1;
	}
	char[] result=new char[s.length()];
     	while(temp2<s.length()){                          //按照数组的顺序读取字符,加入到字符数组
     		for(int k=0;k<numRows;k++){
			Iterator iterator=list[k].iterator();
			while(iterator.hasNext()){
				result[temp2++]=(char)iterator.next();
			}
		}
	}
	String resultstring=new String(result);            //把字符数组变成字符串   
     	return resultstring;
}


可以参考一下别人的,好像比我的简洁很多。。。

LeetCode6Z字形转换






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值