LeetCode 之 ZigZagConversion

题目在这里插入图片描述

这题花了很长时间,难过(ಥ﹏ಥ) 一开始还想到用Map,却感觉越写越复杂。。。

看了一个别人写的,为啥别人想到的办法就这么简单 ̄□ ̄||

只能尽量从中学习一些知识点吧
StringBuilder:StringBuilder是一个可变的字符序列 ,其实质应该是一个字符串。
在 StringBuilder 上的主要操作是 append 和 insert 方法。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。n.append(x) 和 n.insert(n.length(), x) 效果相同

StringBuffer:将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。[1]StringBuilder类可以用于在无需创建一个新的字符串对象情况下修改字符串。StringBuilder不是线程安全的,而StringBuffer是线程安全的。但StringBuilder在单线程中的性能比StringBuffer高。

数组的创建:在创建数组时必须指定数组的大小;StringBuilder[] s=new StringBuilder10;

上代码:

public static String convert(String s, int numRows) {
     
	if(numRows<=1) {   //如果字符串只分一行显示 则直接返回字符串
		return s;
	}
	char[] C=s.toCharArray();  //将字符串转换成字符数组的方法  String.toCharArray() 方便对每一个字符操作
	//创造StringBuilder类型的数组,StringBuilder是一个可变的字符序列 
	StringBuilder[] sb=new StringBuilder[numRows]; //ziazag每一行可以看成一个StringBuilder,最终结果就是从左往右,从上往下读取字符组成一个字符串
	//创造数组对象的方法 必须指定数组大小  
	String zigzag="";  //定义最终的输出结果
	for(int i=0;i<numRows;i++) {
		sb[i]=new StringBuilder("");    //定义StringBuilder 并给其赋空值  注:创建一个数组的时候,必须指定数组大小
	}
	int index=0;   //根据实际情况 往不同的StringBuilder里面添加字符   index为StringBuilder数组的下标 sb[0] sb[1] ...sb[numRows-1]
	int direct=1;
	for(int i=0;i<s.length();i++) {  //从字符数组的第一个字符开始往后遍历  从上往下然后有从下往上 
		sb[index].append(C[i]);   //将字符依次存放在不同的StringBuilder里面 
		
		if(index==0) {   //存放在sb[0] 之后就往下走 
			direct=1;
		}
		if(index==numRows-1) { //但不能一直往下  到sb[numRows-1]之后,就应该往上走 依次-1;直到index=0就不再往上,又重新继续往下
			direct=-1;
		}
		index+=direct;
	}
	
	for(int i=0;i<numRows;i++) {  //横着读     把每一个StringBuilder sb[i]连接起来就是输出结果
		zigzag+=sb[i];  //StringBuilder
	}
	return zigzag;
	
	  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值