博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode [006] : ZigZag Conversion
阅读量:5145 次
发布时间:2019-06-13

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

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".

 

思路:

1、numRows可以计算出每多少个字母一个循环(例如,上面例子中为4个字母一个循环)

2、竖直的字符个数为numRows,斜杠部分的字符个数实际上是numRows - 2,每(numRows * 2 - 2)个数字一个循环

3、每次偏移量增加(numRows * 2 - 2),依次输出即可。判断该位置是否有字符的唯一标准为是否越界,so easy

 

源代码如下:

#include 
#include
#include
using namespace std;class Solution {public: string convert(string s, int numRows) { if (numRows == 1) return s; string strResult; int iLen = s.size(); int iCellNum = numRows * 2 - 2; for (int i = 0; i < numRows; ++i) { if (i == 0 || i == numRows - 1) { int j = i; while (j < iLen) { strResult += s[j]; j += iCellNum; } } else { int j = i; int k = iCellNum - i; while (j < iLen) { strResult += s[j]; j += iCellNum; if (k < iLen) { strResult += s[k]; k += iCellNum; } } } } return strResult; }};int main(){ Solution a; string strResult = a.convert("PAYPALISHIRING", 3); printf("%s\n", strResult.c_str()); system("pause"); return 0;}

 

转载于:https://www.cnblogs.com/lqy1990cb/p/4804174.html

你可能感兴趣的文章
Swift 入门之简单语法(六)
查看>>
shim和polyfill有什么区别
查看>>
Failed to load the JNI shared library “E:/2000/Java/JDK6/bin/..jre/bin/client/jvm.dll
查看>>
Zabbix3.4服务器的搭建--CentOS7
查看>>
〖Python〗-- IO多路复用
查看>>
栈(括号匹配)
查看>>
夜太美---酒不醉--人自醉
查看>>
Java学习 · 初识 面向对象深入一
查看>>
源代码如何管理
查看>>
vue怎么将一个组件引入另一个组件?
查看>>
多线程学习笔记三之ReentrantLock与AQS实现分析
查看>>
【转】进程与线程的一个简单解释
查看>>
getopt,getoptlong学习
查看>>
数据的传递 变量与参数的使用
查看>>
Razor项目所感(上)
查看>>
笔记《精通css》第2章 选择器,注释
查看>>
android程序完全退出步骤
查看>>
bzoj1040: [ZJOI2008]骑士
查看>>
51单片机存储器结构
查看>>
Windows10实用技巧-固定快捷方式到磁贴菜单方式
查看>>