题目:

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   N
A P L S I I G
Y   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".

链接: http://leetcode.com/problems/zigzag-conversion/

题解:

根据例子列出n = 3和n = 4的情况,计算出列间距zigSize = 2 * numRows - 2,所以每行元素为 i + n * zigSize以及斜线的计算公式,当i为行数时,斜线上元素为i + n * zigSize - 2 * i。

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {public String convert(String s, int numRows) {int zigSize = 2 * numRows - 2;if(s == null || s.length() == 0 || zigSize <= 0)return s;StringBuilder result = new StringBuilder();for(int i = 0; i < numRows; i ++){for(int j = i; j < s.length(); j += zigSize){result.append(s.charAt(j));    if(i != 0 && i != numRows - 1 && j + zigSize - 2 * i < s.length() )result.append(s.charAt(j + zigSize - 2 * i));}}return result.toString();}
}

二刷:

Java:

要注意 zigSize = 2 * numSize - 2,  zag = j + zigSize - 2 * i

public class Solution {public String convert(String s, int numRows) {int zigSize = 2 * numRows - 2;  // calculate zigSizeif (s == null || s.length() == 0 || zigSize <= 0) {return s;}StringBuilder sb = new StringBuilder();for (int i = 0; i < numRows; i++) {for (int j = i; j < s.length(); j += zigSize) {sb.append(s.charAt(j));if (i != 0 && i != numRows - 1 && j + zigSize - 2 * i < s.length()) { // calculate zagsb.append(s.charAt(j + zigSize - 2 * i));}}}    return sb.toString();   }
}

Python:

class Solution(object):def convert(self, s, numRows):""":type s: str:type numRows: int:rtype: str"""zigSize = 2 * numRows - 2if s == None or zigSize <= 0:return sres = ''for i in range(numRows):for j in range(i, len(s), zigSize):res += s[j]zag = j + zigSize - 2 * iif i not in (0, numRows - 1) and zag < len(s):res += s[zag]return res

三刷:

其实就是看了一遍二刷的解而已。

Java:

public class Solution {public String convert(String s, int numRows) {int zigSize = 2 * numRows - 2; if (s == null || s.length() == 0 || zigSize <= 0) return s;StringBuilder sb = new StringBuilder();for (int i = 0; i < numRows; i++) {for (int j = i; j < s.length(); j += zigSize) {sb.append(s.charAt(j));if (i != 0 && i != numRows - 1 && j + zigSize - 2 * i < s.length()) { // calculate zagsb.append(s.charAt(j + zigSize - 2 * i));}}}    return sb.toString();   }
}

Reference:

http://www.cnblogs.com/springfor/p/3889414.html

转载于:https://www.cnblogs.com/yrbbest/p/4430333.html

6. ZigZag Conversion相关推荐

  1. ZigZag Conversion

    ZigZag Conversion 1. Question 给定行数,将某字符串转换为zigzag形式,然后按行输出.zigzag形式如: The string "PAYPALISHIRIN ...

  2. [LeetCode题解] ZigZag Conversion

    原文在这,可以来我blog翻翻哦. 第二天.今天AC掉了一道之前没AC掉的题目... 今天的题目是6. ZigZag Conversion 题目描述: The string "PAYPALI ...

  3. [LeetCode]ZigZag Conversion

    题目:ZigZag Conversion 一串字符按照Z字形的数组给了我们,要求转成原本的顺序. 思路: 统计"|/"的个数: 竖着的和斜着的下标有对应关系: 竖着的:k = j* ...

  4. leetCode 6. ZigZag Conversion 字符串 (上传费劲)

    6. ZigZag Conversion 题目:https://leetcode.com/problems/zigzag-conversion/ 1 2 3 4 5 6 7 8 9 10 11 12 ...

  5. [勇者闯LeetCode] 6. ZigZag Conversion

    [勇者闯LeetCode] 6. ZigZag Conversion Description The string "PAYPALISHIRING" is written in a ...

  6. 6——ZigZag Conversion

    六.ZigZag Conversion 锯齿变换 题目大意:输入一个字符串和int型(锯齿层数) 将字符串以锯齿变化重新排序 例: "HAIZEIKEJILAOCHUANZHANG" ...

  7. LeetCode 6. ZigZag Conversion

    原题链接在这里:https://leetcode.com/problems/zigzag-conversion/ 题目: The string "PAYPALISHIRING" i ...

  8. 蜗牛慢慢爬 LeetCode 6. ZigZag Conversion [Difficulty: Medium]

    题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows li ...

  9. ZigZag Conversion leetcode java

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

最新文章

  1. c/c++ c++ file c++/stl/boost 判断文件目录是否存在
  2. 关于线程池你不得不知道的一些设置
  3. 你什么时候使用git rebase而不是git merge?
  4. autorelease使用注意事项
  5. Mybatis学习总结二
  6. Postman Could not get any response
  7. jQuery上拉加载更多
  8. 编写你的第一个 Django 应用,第 5 部分
  9. UOJ#351-新年的叶子【树的直径,数学期望】
  10. Html5和Css3扁平化风格网页
  11. 十一假期国人消费力爆棚,国内旅游收入超6497亿,你花了多少?
  12. 百万畅销书带你学 Python:第一个程序
  13. Linux命令:find
  14. 避免踩坑,数据库主键字段不能为空
  15. google ads 关联 firebase 进行广告投放配置
  16. bat脚本打开cmd执行命令
  17. word中更新目录中只更新页码和更新整个目录的区别
  18. 45、链栈_LinkStack
  19. 华为python673集_实现Redis Cluster并实现Python链接集群
  20. gpg invalid解决方法

热门文章

  1. 网络推广专员浅析网站优化导航栏该怎样设置?
  2. 网站功能页面构建有何技巧?
  3. c语言给定变量a的初始值,2018年9月计算机二级C语言考试冲刺提分试题(一)
  4. 2020年学什么计算机软件,2020年大学计算机软件专业排行榜
  5. 长方形纸做容积最大的长方体_A4纸的尺寸是怎么来的?
  6. 服务器新增svn 文件,公网的SVN服务器,批量新增文件会报错
  7. python3字典升序排序_Python字典和元组总结
  8. (转载)linux如何设置为低内核启动(降核)
  9. 通过apt自动生成建造者模式单线程版代码(三)
  10. IPK僵尸网络 看看其传播手法