博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode问题6
阅读量:5960 次
发布时间:2019-06-19

本文共 1179 字,大约阅读时间需要 3 分钟。

ZigZag Conversion

问题描述如下:

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   NA P L S I I GY   I   R

And then read line by line: "PAHNAPLSIIGYIR"

 

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);

convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

这个问题到手想法就是找规律,把相应位置的字符依次移入即可。

规律如下:当zigzag的行数为n时,第i行依次增加2*(n-i)和2*(i-1)个字符,

例如当n=9时,取字符串的第几个值规律如下:

竖线左侧为字符串标号,右侧为增加值的规律2*(n-i)和2*(i-1)。

据此写代码:

class Solution {    public String convert(String s, int numRows)     {        if((numRows==1)||(s.length()<=numRows))            return s;        StringBuilder res=new StringBuilder();        int[][] a=new int[numRows][2];        int index=0,length=s.length(),j=0;        boolean stop=true;        System.out.println(length);        for (int i=0;i

要点:

1、构建两个数组表示增加值;

2、用StringBuilder字符串编辑;

3、注意原字符串的长度,停止循环;

4、特殊情况:空字符串,字符串的长度比zigzag的长度要小。

我自我感觉时间复杂度没有那么夸张,应该在O(n)上,毕竟每个值都是直接从对应的位置取过来的。但是网站上显示很差劲。。。。

看下Solution后再更新。

转载于:https://www.cnblogs.com/Einsler/p/7589463.html

你可能感兴趣的文章
Laravel 5 5 使用 Jwt Auth 实现 API 用户认证以及无痛刷新访问令牌
查看>>
专注人工智能未来 十年后百度可能完全不一样?
查看>>
阿里开发者招聘节 | 面试题14:如何实现两金额数据相加(最多小数点两位)...
查看>>
企业分布式微服务云SpringCloud SpringBoot mybatis(八)消息总线(Spring Cloud Bus)
查看>>
logback pattern
查看>>
推荐的JVM参数
查看>>
PHP类UTF8编码内的繁简转换-繁体-简体
查看>>
晒晒工作中的静态文件大小控制制度
查看>>
当存储已成白菜
查看>>
Starting httpd: (13)Permission denied: make_sock: could not bind to address 0.0.0.0:9000
查看>>
vim编辑C++代码寻找标准库中结构的的定义
查看>>
CSS3 Flex布局(容器)
查看>>
Apache 重写机制
查看>>
Zabbix中禁用guest用户
查看>>
我的友情链接
查看>>
21.Azure备份Azure上的虚拟机(下)
查看>>
物理主机虚拟化环境ESXI支持VLAN
查看>>
linux备份
查看>>
TP-LINK TL-WVR300版无线路由器手工设置
查看>>
我的友情链接
查看>>