广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现LeetCode字型转换字符串的方法
  • 327
分享到

C++实现LeetCode字型转换字符串的方法

2023-06-20 15:06:22 327人浏览 八月长安
摘要

这篇文章主要介绍“c++实现LeetCode字型转换字符串的方法”,在日常操作中,相信很多人在C++实现LeetCode字型转换字符串的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现LeetCo

这篇文章主要介绍“c++实现LeetCode字型转换字符串的方法”,在日常操作中,相信很多人在C++实现LeetCode字型转换字符串的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现LeetCode字型转换字符串的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

[LeetCode] 6. 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 s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P     I    N
A   L S  I G
Y A   H R
P     I

这道题刚开始看了半天没看懂是咋样变换的,上网查了些资料,终于搞懂了,就是要把字符串摆成一个之字型的,比如有一个字符串 "0123456789ABCDEF",转为 zigzag 如下所示:

当 n = 2 时:

0 2 4 6 8 A C E

1 3 5 7 9 B D F

当 n = 3 时:

0   4    8     C

1 3 5 7 9 B D F

2    6   A     E

当 n = 4 时:

0     6        C

1   5 7   B  D

2 4   8 A    E

3      9       F

可以发现,除了第一行和最后一行没有中间形成之字型的数字外,其他都有,而首位两行中相邻两个元素的 index 之差跟行数是相关的,为  2*nRows - 2, 根据这个特点,可以按顺序找到所有的黑色元素在元字符串的位置,将他们按顺序加到新字符串里面。对于红色元素出现的位置(GitHub 上可能无法正常显示颜色,请参见博客园上的帖子)也是有规律的,每个红色元素的位置为 j + 2 x numRows-2 - 2 x i, 其中,j为前一个黑色元素的 index,i为当前行数。 比如当 n = 4 中的那个红色5,它的位置为 1 + 2 x 4-2 - 2 x 1 = 5,为原字符串的正确位置。知道了所有黑色元素和红色元素位置的正确算法,就可以一次性的把它们按顺序都加到新的字符串里面。代码如下:

解法一:

class Solution {public:    string convert(string s, int numRows) {        if (numRows <= 1) return s;        string res;        int size = 2 * numRows - 2, n = s.size();        for (int i = 0; i < numRows; ++i) {            for (int j = i; j < n; j += size) {                res += s[j];                int pos = j + size - 2 * i;                if (i != 0 && i != numRows - 1 && pos < n) res += s[pos];            }        }        return res;    }};

若上面解法中的规律不是很好想的话,我们也可以用下面这种更直接的方法来做,建立一个大小为 numRows 的字符串数组,为的就是把之字形的数组整个存进去,然后再把每一行的字符拼接起来,就是想要的结果了。顺序就是按列进行遍历,首先前 numRows 个字符就是按顺序存在每行的第一个位置,然后就是 ‘之' 字形的连接位置了,可以发现其实都是在行数区间 [1, numRows-2] 内,只要按顺序去取字符就可以了,最后把每行都拼接起来即为所求,参见代码如下:

解法二:

class Solution {public:    string convert(string s, int numRows) {        if (numRows <= 1) return s;        string res;        int i = 0, n = s.size();        vector<string> vec(numRows);        while (i < n) {            for (int pos = 0; pos < numRows && i < n; ++pos) {                vec[pos] += s[i++];            }            for (int pos = numRows - 2; pos >= 1 && i < n; --pos) {                vec[pos] += s[i++];            }        }        for (auto &a : vec) res += a;        return res;    }};

到此,关于“C++实现LeetCode字型转换字符串的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C++实现LeetCode字型转换字符串的方法

本文链接: https://www.lsjlt.com/news/297701.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现LeetCode字型转换字符串的方法
    这篇文章主要介绍“C++实现LeetCode字型转换字符串的方法”,在日常操作中,相信很多人在C++实现LeetCode字型转换字符串的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++实现LeetCo...
    99+
    2023-06-20
  • C++实现LeetCode(6.字型转换字符串)
    [LeetCode] 6. ZigZag Conversion 之字型转换字符串 The string "PAYPALISHIRING" is written i...
    99+
    2022-11-12
  • JavaScript字符串转换数字的方法
    目录1.parseInt(string, radix) 2.Number() 3.parseFloat() 方法主要有:1.parseInt() ;2.Number() ;3.par...
    99+
    2022-11-12
  • C++实现LeetCode(8.字符串转为整数)
    [LeetCode] 8. String to Integer (atoi) 字符串转为整数 Implement atoi which converts...
    99+
    2022-11-12
  • javascript数字转换为字符串的方法
    本篇内容介绍了“javascript数字转换为字符串的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!转...
    99+
    2022-10-19
  • php字符串转换为数字的方法
    php字符串转换为数字的方法:1、在sublime_text软件中新建一个php文件。2、编写php网页结构(<php>)。3、声明php网页和浏览器交互的文件类型和编码。4、定义字符串变量,。5、使用var_dump()输出变...
    99+
    2022-10-23
  • C++实现LeetCode(151.翻转字符串中的单词)
    [LeetCode] 151.Reverse Words in a String 翻转字符串中的单词 Given an input string, reverse the strin...
    99+
    2022-11-12
  • C#中字符串与字节数组的转换方式
    一、编码(转成字节数组)GetBytes   1、ASII码:字符串中的每个字符用一个字节表示。 每个字符实际上只使用了7位,从00h-7Fh。只能表达128个字符。不能代...
    99+
    2022-11-13
  • C++实现LeetCode(205.同构字符串)
    [LeetCode] 205. Isomorphic Strings 同构字符串 Given two strings s and t, determi...
    99+
    2022-11-12
  • C++实现LeetCode(43.字符串相乘)
    [LeetCode] 43. Multiply Strings 字符串相乘 Given two non-negative integers num1 and...
    99+
    2022-11-12
  • C++实现LeetCode(87.搅乱字符串)
    [LeetCode] 87. Scramble String 搅乱字符串 Given a string s1, we may represent it as a binar...
    99+
    2022-11-12
  • 详解C语言内核字符串转换方法
    在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING,这两种格式是微软推出的安全版本的字符串结构体,也是微软推荐使用的格式,通常情况下ANSI_STRIN...
    99+
    2022-11-13
  • python实现字典(dict)和字符串(string)的相互转换方法
    本文实例讲述了python实现string和dict的相互转换方法。分享给大家供大家参考,具体如下: 字典(dict)转为字符串(string) 我们可以比较容易的将字典(dict)类型转为字符串(stri...
    99+
    2022-06-04
    字符串 字典 方法
  • php字符串转换编码的方法
    这篇“php字符串转换编码的方法”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php字符串转换编码的方法”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起...
    99+
    2023-06-06
  • mysql把日期转换为字符串类型的方法
    这篇文章给大家分享的是有关mysql把日期转换为字符串类型的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。在mysql中可以通过“select date_format(...
    99+
    2022-10-18
  • mysql中把字符串转换为int类型的方法
    这篇文章给大家分享的是有关mysql中把字符串转换为int类型的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql中把字符串转换为int类型的方法:可以利用Conver...
    99+
    2022-10-18
  • JavaScript字符串转换数字的方法有哪些
    这篇文章主要介绍“JavaScript字符串转换数字的方法有哪些”,在日常操作中,相信很多人在JavaScript字符串转换数字的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
  • MySQL 字符串转换为数字的方法小结
    方法一:直接 加 0select '123' + 0 方法二:函数 convert语法:convert (value, type);type可以为: decima...
    99+
    2022-11-12
  • Python字符串字母大小写转换方法
    这篇文章主要介绍“Python字符串字母大小写转换方法”,在日常操作中,相信很多人在Python字符串字母大小写转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字符串字母大小写转换方法”的疑...
    99+
    2023-06-30
  • javascript实现json字符串与对象转换的方法
    这篇文章主要介绍“javascript实现json字符串与对象转换的方法”,在日常操作中,相信很多人在javascript实现json字符串与对象转换的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jav...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作