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

牛牛的旗语传递

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();
    }
}
全部评论

相关推荐

一颗宏心:华为HR晚上过了十二点后还给我法消息。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务