题解 | #牛牛的旗语传递# 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 res = new StringBuilder();
        for (StringBuilder row : rows) {
            res.append(row);
        }

        return res.toString();
    }
}

Java语言。

这道题目考察的是字符串的编码和解码,以及对字符排列的规律性处理。

解题思路如下:

  1. 判断特殊情况,如果行数 numRows 为1,那么直接返回原始字符串 s
  2. 创建一个字符串列表 rows,列表的长度为 numRows 和 s 的长度的较小值。用来存储按照规律排列后的字符。
  3. 初始化当前行 curRow 为 0,表示当前行为第一行。
  4. 初始化一个布尔变量 goingDown,用来判断当前字符的方向是向上还是向下。
  5. 遍历字符串 s 中的每个字符:将当前字符添加到 rows[curRow] 的末尾。判断当前行 curRow 是否在第一行或最后一行,如果是,则将 goingDown 取反,改变方向。根据 goingDown 的值更新 curRow,如果 goingDown 为真,则 curRow 加 1,否则减 1。
  6. 构建结果字符串 res,将列表 rows 中的每个元素依次拼接到 res 的末尾。
  7. 返回结果字符串 res
全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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