Java 题解 | #牛牛的旗语传递#

牛牛的旗语传递

https://www.nowcoder.com/practice/810b1c80a9c341c4af69facac350d6bc

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @param numRows int整型
     * @return string字符串
     */
    public String decodeFlag (String s, int numRows) {
        // write code here
        if (numRows == 1) {
            return s;
        }
        List<StringBuilder> rows = new ArrayList<>();
        for (int i = 0; i < Math.min(numRows, s.length()); i++) {
            rows.add(new StringBuilder());
        }

        int curRow = 0;
        boolean goingDown = false;

        for (char c : s.toCharArray()) {
            rows.get(curRow).append(c);
            if (curRow == 0 || curRow == numRows - 1) {
                goingDown = !goingDown;
            }
            curRow += goingDown ? 1 : -1;
        }

        StringBuilder ret = new StringBuilder();
        for (StringBuilder row : rows) {
            ret.append(row);
        }
        return ret.toString();
    }

}

编程语言是 Java。

该题考察的知识点包括字符串操作、循环、条件判断、数组的使用以及字符串构建。

代码的文字解释如下:

  1. 如果 numRows 等于 1,直接返回原始字符串 s
  2. 创建了一个 ArrayList 集合 rows,用于存储每一行的字符。循环遍历 numRows 和 s 长度的较小值,为每一行创建一个 StringBuilder 实例,并将其添加到 rows 集合中。
  3. 初始化变量 curRow 为 0,goingDown 表示是否正在向下移动的标志。
  4. 遍历输入字符串 s 中的每个字符:将当前字符追加到当前行的 StringBuilder 对象中,实现按行存储字符。如果当前行是第一行或最后一行,则改变 goingDown 的状态,以控制行的移动方向。根据 goingDown 的状态,更新 curRow 的值,从而决定下一个字符应该被添加到哪一行。
  5. 创建一个 StringBuilder 对象 ret,用于最终存储解码后的结果。
  6. 遍历 rows 集合中的每一行,将其内容逐一追加到 ret 中。
  7. 将 ret 转换为字符串并返回,这就是解码后的结果。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务