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://blog.csdn.net/zhouworld16/article/details/14121477的图片说明:

所谓的ZigZag,就是这样的:

因此可以找到每行排列数字的规律,nRows = n,字符串字符下标从0开始。

普通青年:

①   先读第1行:0, 0 + 2n-2, 0 + (2n-2)*2,...

②   读第2行至第n-2行,设行数为e,则每行读取数字为:

  e-1,e-1 + 2n-2 - (e-1)*2, e-1 + 2n-2, e-1+2n-2 + 2n-2 - (e-1)*2, ...

  规律即,两个数字一组,每组间隔2n-2:

  for (int i=e-1; i<string.length(); i+=2n-2) {

    每组元素可表示为i 和 i + 2n-2 - (e-1)*2

  }

③  读最后一行:n-1, n-1 + 2n-2, n-1 + (2n-2)*2, ...

(由于每循环一组,会读出两个数字。注意判定字符串越界)

 class Solution {
public:
string convert(string s, int nRows) {
string res;
int len = s.length(); if (nRows == )
return res; if (nRows == )
return s; for(int i=; i<len; i+=*nRows-)
res.push_back(s[i]); int index = ;
while(nRows--index){
for(int i=index; i<len; i+=*nRows-) {
res.push_back(s[i]);
int zig = i + 2 * nRows - 2 * index - ;
if (zig < len)
res.push_back(s[zig]);
}
index++;
} for(int i=nRows-; i<len; i+=*nRows-)
res.push_back(s[i]); return res; }
};

聪明的青年:

类似于期末考试考场排座位,一般为蛇形排号。将考场的座位按一竖列为一组,编号时,第一组的座位从前向后编号,对第二组从后向前进行编号,如下图:

① ⑧ ⑨

② ⑦       ...

③ ⑥

④ ⑤

nRows即为每组能坐多少人。因此先让同学们按编号入座,再从前向后按横排依次读出他们的编号即为本题答案。

 class Solution {
public:
string convert(string s, int nRows) {
string sArray[nRows];
string res = "";
int index = ; if (nRows == )
return s; for(int i=; i<s.length(); ++i){
sArray[index] += s[i]; if (!(i / (nRows-) % )) {
index++;
} else {
index--;
}
} for(int i=; i<nRows; ++i){
res += sArray[i];
} return res;
}
};

当然是原创的。

【Leetcode】【Easy】ZigZag Conversion的更多相关文章

  1. 【LeetCode题意分析&解答】40. Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  2. 【LeetCode题意分析&解答】37. Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  3. 【LeetCode题意分析&解答】35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  4. ACM金牌选手整理的【LeetCode刷题顺序】

    算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...

  5. 【LeetCode算法题库】Day2:Median of Two Sorted Arrays & Longest Palindromic Substring & ZigZag Conversion

    [Q4] There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of th ...

  6. 【leetcode刷题笔记】ZigZag Conversion

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

  7. 【LeetCode算法题库】Day3:Reverse Integer & String to Integer (atoi) & Palindrome Number

    [Q7]  把数倒过来 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Outpu ...

  8. 【LeetCode算法题库】Day7:Remove Nth Node From End of List & Valid Parentheses & Merge Two Lists

    [Q19] Given a linked list, remove the n-th node from the end of list and return its head. Example: G ...

  9. 【LeetCode算法题库】Day4:Regular Expression Matching & Container With Most Water & Integer to Roman

    [Q10] Given an input string (s) and a pattern (p), implement regular expression matching with suppor ...

  10. 【LeetCode算法题库】Day1:TwoSums & Add Two Numbers & Longest Substring Without Repeating Characters

    [Q1] Given an array of integers, return indices of the two numbers such that they add up to a specif ...

随机推荐

  1. QDU_CEF(补)

    C - Arthur and Table Arthur has bought a beautiful big table into his new flat. When he came home, A ...

  2. UVALive - 3942 左儿子trie DP

    题意:白书P209 本题用普通字典树会更快,为了练习还是尝试再敲一遍左儿子-右兄弟字典树(其实就是字典树上开前向星) dp[i]为满足[i...len)的分配方案数,转移方程为dp[i]=sum{dp ...

  3. Randy Pausch’s Last Lecture

          he University of Virginia American Studies Program 2002-2003.                     Randy Pausch ...

  4. 中间件使用之(UA,IP,selenium)的使用

    一.UA池:User-Agent池 - 作用:尽可能多的将scrapy工程中的请求伪装成不同类型的浏览器身份. - 操作流程: 1.在下载中间件中拦截请求 2.将拦截到的请求的请求头信息中的UA进行篡 ...

  5. win10更新后电脑没声音问题

    2018-07-18 问题描述: win10系统更新之后,发现电脑突然没声音了 解决方案: 找到了一个软件,测试超级好用,下载链接 链接:https://pan.baidu.com/s/1iKTHp7 ...

  6. tomcat普通用户启动不了

    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined  At least one of these enviro ...

  7. Python学习 day05

    数据类型划分 数据类型可分为:可变数据类型,不可变数据类型 不可变数据类型:bool.int.str.元祖         --  不可变数据类型又称为可哈希的 可变数据类型:list.dict.se ...

  8. javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理

    有一种创建对象的方法叫做工厂模式,例如: function person(name,age){ var o=new Object(); o.name=name; o.age=age; return o ...

  9. redis API ---python

    一, 安装配置 必须安装python3以上 配置文件自己下载,搜索名字百度 解压---->Python  --->./configure-->yum install -y zlib* ...

  10. 【3dsMax安装失败,如何卸载、安装3dMax 2013?】

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...