zoukankan      html  css  js  c++  java
  • Leet Code 6.Z字形变换

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

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

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

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

    题解

    这个思想很奇妙,时间复杂度和空间复杂度都是O(n),首先用一个存储StringBuilder的链表来存放各行的字符。

    1. 遍历字符串s,将字符c相应的放到对应的行的链表中。比如字符c是第三行,就放到链表第三个中。
    2. 最后将链表的3个结点的值加起来,就是所要的结果。LCIR+ETOESIIG+EDHN

    其中有一个goingDown信号量来判断是否到第一行和最后一行。

    • 面向对象的代码要依赖于抽象,不依赖于具体,比如 List<> list = ArrayList<> ();
    • 用ArrayList类来实现List接口,list可以使用List接口的方法,不可以使用ArrayList的方法。但是以后修改,只需要将list依赖改掉就好。
    我的解法代码
    import java.lang.reflect.Array;
    import java.util.*;
    
    public class leetcode {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            String s = scan.nextLine();
            int row = scan.nextInt();
            String str = convert(s, row);
            System.out.println(str);
        }
    
        public static String convert(String s, int numRows) {
            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 ret = new StringBuilder();
            for (StringBuilder row : rows) {
                ret.append(row);
            }
            return ret.toString();
        }
    }
    
  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12298836.html
Copyright © 2011-2022 走看看