【Leetcode】【Easy】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 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的更多相关文章
- 【LeetCode题意分析&解答】40. Combination Sum II
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- 【LeetCode题意分析&解答】37. Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- 【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 ...
- ACM金牌选手整理的【LeetCode刷题顺序】
算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...
- 【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 ...
- 【leetcode刷题笔记】ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- 【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 ...
- 【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 ...
- 【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 ...
- 【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 ...
随机推荐
- QDU_AP协会18级ST1
A - A + B Problem II I have a very simple problem for you. Given two integers A and B, your job is t ...
- C++ STL之Vector
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的 ...
- 1136 A Delayed Palindrome (20 分)
Consider a positive integer N written in standard notation with k+1 digits ai as ak⋯a1a0 ...
- qs.parse() 和 qs.stringfy() 之 传输数据秘籍
qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 1. qs.parse()将URL解析成对象的形式 const Qs = require('qs');let url ...
- windows 系统C盘暴增
系统: Windows Server 2012R2 问题: C盘200G的空间,暴增剩余3G.但是查看仅有69G的空间占用. 根源:Windows的虚拟文件,驱动器分页. 解决方案: 我的电脑-> ...
- MVC Control 接收post请求的json数据
[HttpPost] public string QueryInvoice() { string stream; using (var sr = new StreamReader(Request.In ...
- oracle 单实例DG(切换篇三)
一,开篇 此篇操作承接上文,必须完成DG实例搭建完成方可有执行以下内容的实例 二,切换物理备库 one. oracle01库命令 select switchover_status from v$dat ...
- jquery:字符串(string)转json
第一种方式: 使用js函数eval(); testJson=eval(testJson);是错误的转换方式. 正确的转换方式需要加(): testJson = eval("(" + ...
- Kettle集群部署(1台Windows主机和2台Linux服务器)
不多说,直接上干货! http://blog.csdn.net/jianglushou9763/article/details/70859616
- hibernate框架的搭建
1 导入所需的jar包 1 导入hibernate必须的jar包 2 导入驱动包 2 创建数据库,准备表,实体 1 创建hibernate数据库 CREATE DATABASE hibernate; ...