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%的用户
    
  • 相关阅读:
    【模仿】一个充满BUG的小程序
    JAVA中的内部类
    oracle删除实例的方法
    牢记每个死循环都要有跳出语句【这个要看】
    删除无效服务的命令
    Oracle触发器和new、old特殊变量
    Python模块之os 系统操作
    Python模块之pyautogui 模拟按下键盘
    Python模块之platform 获取平台信息
    Python官方内置函数V3.10详解
  • 原文地址:https://www.cnblogs.com/lzxulxy/p/11676767.html
Copyright © 2011-2022 走看看