题目
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
代码实现
public String convert(String s, int numRows) {
if(numRows==1) return s;
StringBuffer stringBuffer = new StringBuffer();
//map的key是第几行,value是每一行的数据
HashMap<Integer, StringBuffer> hashMap = new HashMap<>();
boolean flag = true; //方向标识符 true是向上 false是向下
int tag = 0;
for (int i = 0; i < s.length(); i++) {
//首尾改变方向
if (tag==0||tag==numRows-1){
flag = !flag;
}
//map放内容
if (hashMap.containsKey(tag)){
hashMap.put(tag,hashMap.get(tag).append(s.charAt(i)));
}else{
hashMap.put(tag,new StringBuffer().append(s.charAt(i)));
}
//改变行数
if (flag){
tag--;
}else{
tag++;
}
}
for (Map.Entry<Integer, StringBuffer> entry : hashMap.entrySet()) {
stringBuffer.append(entry.getValue());
}
return stringBuffer.toString();
}