import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param numRows int整型
     * @return string字符串
     */
    public String decodeFlag(String s, int numRows) {
        // 初始化结果数组,用于按行存储解码后的字符
        String[] res = new String[numRows];

        // 将结果数组的每个元素初始化为空字符串
        for (int i = 0; i < res.length; i++) {
            res[i] = "";
        }

        // 将输入字符串转换为字符数组
        char[] ch = s.toCharArray();

        // 初始化索引和方向标志
        int index = 1;  // 当前要添加字符的行索引
        int flag = 1;   // 控制行索引移动的方向,初始值为向下

        // 将第一个字符放入第一行
        res[0] += ch[0];

        // 遍历输入字符数组并按照 ZigZag 模式解码
        for (int i = 1; i < ch.length; i++) {
            // 如果当前行索引达到了第一行或最后一行,改变方向
            if (index == 0 || index == numRows - 1) {
                flag = -flag; // 改变方向,从向下变为向上或从向上变为向下
            }

            // 将当前字符添加到相应的行中
            res[index] += ch[i];

            // 根据方向标志更新行索引
            index += flag;
        }

        // 将结果数组中的每一行连接起来,形成最终的解码结果字符串
        String result = "";
        for (String str : res) {
            result += str;
        }

        return result; // 返回最终的解码结果字符串
    }
}

本题知识点分析:

1.数组遍历

2.字符串拼接

3.数学模拟

4.字符串转字符数组

本题解题思路分析:

1.将输入字符串转换为字符数组

2.遍历输入字符数组并按照 ZigZag 模式解码

3. 将结果数组中的每一行连接起来,形成最终的解码结果字符串

本题使用编程语言: JAVA