leetcode - 6. ZigZag Conversion with Java

题目地址
这道题涉及到String, StringBuffer, StringBuilder的知识点
String在拼接时需要new新的String对象, 而它除了hash之外都是final属性, 分配空间会造成时间损耗.
所以String不适合大量拼接. 使用String可是耗时18ms呢
StringBuffer解决了这个问题, 它提升了速度, 是线程安全.
而StringBuilder 和StringBuffer类似, 但它是线程不安全, 这也使得它比StringBuffer拼接更快. 本题只需3ms
有没有更快的呢, 当然有, 还就是它了 char[], 只需2ms(笑)
100%什么的就是给我的恩赐

import java.lang.reflect.Method;
import java.util.*;
class Solution {
    public String convert(String s, int numRows) {
        int N = s.length();
        // StringBuilder res = new StringBuilder();
        char res[] = new char[N];
        int cycle = (numRows-1)*2;
        int index = 0;
        if(numRows==1){
            return s;
        }
        for(int row=0;row<numRows;row++){
            /* row 
                0 6 
                1 4 2
                2 2 4
                3 0 
              */
            for(int i=row;i<N;i+=cycle){
                /* 一个锯齿*/
                // res.append(s.charAt(i));
                res[index++] = s.charAt(i);
                int next = i+(cycle-2*row); // i + cycle - 2*row < i + cycle  => row > 0
                if(next < N && row > 0 && next != i){
                    // res.append(s.charAt(next));
                    res[index++] = s.charAt(next);
                }
            }
        }
        return new String(res);
    }
}


class Main {
    public static void main(String[] args) throws Exception{
        Solution solution = new Solution();
        String i =solution.convert("PAYPALISHIRING",3);
        System.out.println(i);
    }
}   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值