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

牛牛的旗语传递

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

  1. 题目考察的知识点

字符串,矩阵变换

  1. 题目解答方法的文字分析

设 nnn 为字符串 sss 的长度,r=numRows。对于 r=1(只有一行)或者 r≥n(只有一列)的情况,答案与 s相同,我们可以直接返回 sss。对于其余情况,考虑创建一个二维矩阵,然后在矩阵上按 Z 字形填写字符串 sss,最后逐行扫描矩阵中的非空字符,组成答案。

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param numRows int整型 
     * @return string字符串
     */
    public String decodeFlag (String s, int numRows) {
        int n= s.length(),r=numRows;
        //对于 r=1(只有一行)或者 r≥n(只有一列)的情况,答案与 s相同,我们可以直接返回 s。
        if(r==1||r>=n){
            return s;
        }
        //创建一个二维矩阵,然后在矩阵上按 Z 字形填写字符串 s,最后逐行扫描矩阵中的非空字符,组成答案。
        int t=r*2-2;
        int c=(n+t-1)/t*(r-1);
        char[][] mat = new char[r][c];
        for(int i=0,x=0,y=0;i<n;i++){
            mat[x][y]= s.charAt(i);
            if(i%t<r-1){
                x++;//向下
            }else{
                x--;
                y++;//向右上
            }
        }
        //逐行扫描矩阵中的非空字符,组成答案
        StringBuilder ans = new StringBuilder();
        for(char[] row : mat){
            for(char ca:row){
                if(ca!=0){
                    ans.append(ca);
                }
            }
        }
        return ans.toString();
    }
}
全部评论

相关推荐

06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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