zoukankan      html  css  js  c++  java
  • Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

    比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

    L   C   I   R
    E T O E S I I G
    E   D   H   N
    

    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

    请你实现这个将字符串进行指定行数变换的函数:

    string convert(string s, int numRows);
    
    示例 1:
    输入: s = "LEETCODEISHIRING", numRows = 3
    输出: "LCIRETOESIIGEDHN"
    
    示例 2:
    输入: s = "LEETCODEISHIRING", numRows = 4
    输出: "LDREOEIIECIHNTSG"
    解释:
    
    L     D     R
    E   O E   I I
    E C   I H   N
    T     S     G
    

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/zigzag-conversion
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    class Solution {
        public String convert(String s, int numRows) {
            if (s==null||numRows==0){
                return null;
            }
            int l=s.length();
            int num=2*numRows-2;
            if (l==1||numRows==1){
                return s;
            }
            LinkedList<String>[] linkedLists=new LinkedList[numRows];
            for (int i = 0; i < numRows; i++) {
                linkedLists[i]=new LinkedList<>();
            }
            int x=l/num;
            int y=l%num;
            int q=0;
            for (int i = 0; i < x; i++) {
                for (int j = 0; j < numRows; j++) {
                    linkedLists[j].add(String.valueOf(s.charAt(q)));
                    q++;
                }
                for (int j = numRows-2; j > 0; j--) {
                    linkedLists[j].add(String.valueOf(s.charAt(q)));
                    q++;
                }
            }
            if(y!=0){
                if(y>=numRows){
                for (int j = 0; j < numRows; j++) {
                    linkedLists[j].add(String.valueOf(s.charAt(q)));
                    q++;
                }
                for (int j = numRows-2; j > 2*numRows-y-2; j--) {
                    linkedLists[j].add(String.valueOf(s.charAt(q)));
                    q++;
                }
                }
                if(y<numRows){
                    for (int j = 0; j < y; j++) {
                        linkedLists[j].add(String.valueOf(s.charAt(q)));
                        q++;
                    }
                }
            }
            String s1="";
            for (int i = 0; i < numRows; i++) {
                for (int j = 0; j < linkedLists[i].size(); j++) {
                    s1=s1+linkedLists[i].get(j);
                }
            }
        
    
            return s1;
        }
    }
    
    执行用时 :28 ms, 在所有 java 提交中击败了41.48%的用户
    
    内存消耗 :38.9 MB, 在所有 java 提交中击败了94.49%的用户
    
  • 相关阅读:
    Splay 区间操作(二)
    P1351 联合权值
    Splay 区间操作
    P1801 黑匣子_NOI导刊2010提高(06)
    P3620 [APIO/CTSC 2007]数据备份
    T25990 [Wind Festival]Running In The Sky
    P1484 种树
    P4177 [CEOI2008]order
    题解 P2762 【太空飞行计划问题】
    dalao&话
  • 原文地址:https://www.cnblogs.com/lzxulxy/p/11676767.html
Copyright © 2011-2022 走看看