力扣题库刷题笔记7--N字型变换

这篇具有很好参考价值的文章主要介绍了力扣题库刷题笔记7--N字型变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、题目如下:

力扣题库刷题笔记7--N字型变换

2、个人Python代码实现:

        看到此题的第一反应就是,生成一个类似二维数组的多个字符串,然后用个标志位控制N字符中字符的方向,例如flag = True,在每次循环时候以flag = flag * -1来控制。

        由于示例中字符串s可能看的不是很确切,所以为了更好的理解,于是自定义了一个字符串

s = "ADINSXTOJEBFKPUYVQLGCHMRWZ",numRows = 6。这样其进行N字型变换后,会按照英文字母排序,接下来用Excel加深理解:

力扣题库刷题笔记7--N字型变换

        以上图为例,原本的思路是根据numRows生成对应个数的字符串,“ABC”、“DEFGH”以此类推,最后将字符串求和,中间有个点是需要通过标志位控制字符方向。由于个人确实不擅长生成二维数组类似的操作,所以换个思路,采用循环的方式,也就是最初思路中生成的字符串个数,转换成循环次数即可。关于上图,做以下解释:

        a、表的行数代表了循环次数,循环次数的值也就是numRows,那么这里就会出现一个问题,每一次循环在字符串s中取多少个字符呢?取得字符个数可以理解为表里面有多少种颜色。

换种说法就是,外部循环次数为numRows,内部循环通过字符下标去判断循环次数,这里经过过观察,每一次内部循环次数其实是math.ceil(len(s) / 2* (nowRows - 1)),如果这里次数不理解,可以参照上表字符A到字符E是第一次循环,字符B到字符G代表第二次循环(如果有小伙伴表示这个循环的方式和表中的背景颜色不同,也可以理解成T-Y是第一次,V-Z是第二次)

        b、第一列加粗的不算是一次内部循环,这里可以理解成每一次内部循环开始前,需要去定位从哪个字符开始取,所以第一列就是用于定位的

        c、针对有背景色的数字做个解释,其中的数字代表的是他与他左侧的字符的距离。以第2行为例,字符是DEFGH,D是第2次内部循环开始前,从D开始取,而DE、EF、FG、GH之间的下标差分别是8282,所以在最后的表里面第2行的值 分别就是18282。

力扣题库刷题笔记7--N字型变换

        d、继续观察,N字型转换的竖列之间下标差都是2 * (numRows - 1),参考下面两个图

 力扣题库刷题笔记7--N字型变换

        力扣题库刷题笔记7--N字型变换

        针对以上几个点,可以开始写代码了:

力扣题库刷题笔记7--N字型变换

        代码如下:

class Solution:

    def convert(self, s: str, numRows: int) -> str:

        if numRows >= len(s) or numRows == 1:               #当numRows值大于等于字符串s长度时,直接返回字符串s

            out_put = s

        else:

            num1 = 0                        #num1用于记录外部循环次数

            num2 = math.ceil(len(s) / (2 * (numRows - 1)))    #num2用于判断内部循环次数,这里注意向上取整  

            num = 2 *(numRows - 1)          #num用于记录N字型竖列之间的下标差

            out_put = ''                    #用于输出

            while num1 < numRows:

                temp = s[num1]              #初始化每一次循环开始,从哪个下标开始取字符

                out_put += temp             #将初始化的字符加入out_put

                i = 1

                if num1 == 0 or num1 == (numRows - 1):   #当循环不是第一次或者最后一次时,每一次内部循环只取1个字符加入out_put

                    while i <= num2:                        

                        num4 = num1 + num * i

                        try:

                            out_put += s[num4]

                        except:

                            pass

                        i += 1

                    num1 += 1

                else:                                   

                    while i <= num2:

                        num4 = num1 + num * i

                        num3 = num4 - 2 * num1

                        try:

                            out_put += s[num3]

                            out_put += s[num4]

                        except:

                            pass

                        i += 1

                    num1 += 1

        return out_put

3、题解Python实现:

        这里只截个图,思路实际上是我最初的思路,但是我知道杂生成多个字符串,也写不到这么简洁,膜拜。

力扣题库刷题笔记7--N字型变换

        文章来源地址https://www.toymoban.com/news/detail-492054.html

到了这里,关于力扣题库刷题笔记7--N字型变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣题库刷题笔记36--有效的数独

    1、题目如下:  2、个人Python代码实现如下: 3、个人Python代码思路:         先放一个AI解释的思路:         个人理解,本题思路其实很简单,判断每一行、每一列、每一个3*3的子数独是否存在重复数字,如果存在则返回False,如果不存在则返回True。         1、首先

    2024年02月13日
    浏览(48)
  • 力扣题库刷题笔记5--最长回文子串

    1、题目如下: 2、个人Python代码实现:         首先想到的是通过类似冒泡排序的方式进行切片,然后判断切片的子字符串是否为回文字符串,然后记录出最长的回文字符串,代码如下:         可以看到,通过切片的方式,在字符串长度只有1的时候,会报错。当然,这里

    2024年02月09日
    浏览(57)
  • 力扣题库刷题笔记496-下一个更大元素

    1、题目如下: 2、个人Python代码实现   代码如下: class Solution:     def nextGreaterElement(self, nums1: List[int], nums2: List[int]) - List[int]:         #空列表用于输出结果         ans = []         for i in nums1:             #如果nums2中不包含或者最后一位元素为当

    2023年04月26日
    浏览(39)
  • 力扣刷题笔记-06 N字形变换

    不要混日子,小心日子把你混了 对于题目的理解 比如说,我给一个字符串,LEETCODE,行数为3,然后按照N字形排列,就是下面这个排列方式。排列完之后正常读取,结果就是LCETOEED。这叫做N字形变换。 这个例子里给的行数就是3,往下排三行,然后往右往上走。 思路 边界情况

    2024年02月08日
    浏览(29)
  • 【leetcode 力扣刷题】回文串相关题目(KMP、动态规划)

    题目链接:5. 最长回文子串 题目内容: 题目就是要我们找s中的回文子串,还要是最长的。其实想想,暴力求解也行……就是遍历所有的子串,同时判断是不是回文串,是的话再和记录的最大长度maxlen比较,如果更长就更新。时间复杂度直接变成O(n^3)。 优化的点在于,假设子

    2024年02月09日
    浏览(48)
  • 力扣刷题笔记

    诸神缄默不语-个人CSDN博文目录 我以前刷过一波力扣,然后全忘了……从0开始的力扣复活赛! 以前刷题用的是Java,现在Java几乎忘光了,所以现在是Python 3 + Java双语选手。 以下题目按照力扣官方顺序排列。 449. 序列化和反序列化二叉搜索树 1281. 整数的各位积和之差 1749. 任意

    2024年02月14日
    浏览(40)
  • 【刷题笔记8.10】LeetCode题目:有效括号

    给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号 首先,解决此题,我们要明确使用 栈

    2024年02月13日
    浏览(37)
  • 【刷题笔记8.8】LeetCode题目:两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是, 数组中同一个元素在答案里不能重复出现 。 你可以按任意顺序返回答案。 解法1:使用HashMap对数

    2024年02月13日
    浏览(42)
  • 力扣刷题笔记-07 整数反转

    狗看了都摇头的年纪,纯爱战士一败涂地。 temp用来保存个位数 res用来保存当前结果 123,取模运算,这样就可以获得最后一位。比如对123%10,得到temp=3. 判断res是不是溢出( 重点 ) 如果没有溢出,res扩大十倍,再加上个位数,就相当于是反转了。res = res * 10 + temp; 返回res。

    2024年02月08日
    浏览(44)
  • 入门力扣自学笔记260 C++ (题目编号:2413)

    2413. 最小偶倍数 给你一个正整数 n ,返回 2 和 n 的最小公倍数(正整数)。 输入:n = 5 输出:10 解释:5 和 2 的最小公倍数是 10 。 输入:n = 6 输出:6 解释:6 和 2 的最小公倍数是 6 。注意数字会是它自身的倍数。 1 = n = 150 来源:力扣(LeetCode) 链接:https://leetcode.cn/probl

    2023年04月26日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包