LeetCode--Z 字形变换

43 阅读1分钟

题目

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

image.png

代码实现

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();
}