百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

跟我学:LeetCode刷题之6. Z 字形变换

bigegpt 2024-10-12 06:08 7 浏览



导读

今天进行了快手的三面,是快手客户端的负责人,人很好。主要是就我做的项目着重聊了一下,然后杭州快手各业务线的一些介绍,然后说了一下快手的技术栈及个人成长相关的事,最后手写了二分查找。这算法题我是懵的,没想到这么简单,简单到我感觉是闭着眼睛写出来的。最后了解了我的工作内容,项目经历匹配程度较高,这也可能是算法简单的原因。最后让我加他微信,有什么问题都可以找他,然后hr安排了,明天hr面试。好了下面继续今天的题目。

看题总结

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"

示例 2:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

Related Topics

  • 字符串
  • 通过对题目的阅读,我们可以得出以下几个结论

    • 题目类型为字符串
    • 题意为给定字符按Z字排列,然后安航输出
    • 输入安全判断,空字符串

    多解法及复杂度分析

    解法一:按行排序

    按顺序遍历字符串 s;

    • list.get(i).append(c); 把每个字符 c 填入对应行 ;
    • i += flag: 更新当前字符 c 对应的行索引;
    • flag = - flag: 在达到 ZZ 字形转折点时,执行反向。

    具体代码如下

    public String convert(String s, int numRows) {
            if (s == null || s.length() == 0 || numRows < 2) { // 0行或者1行
                return s;
            }
            ArrayList<StringBuilder> list = new ArrayList<>();
            for (int i = 0; i < numRows; i++) {
                list.add(new StringBuilder());
            }
    
            int i = 0, flag = 1;
            for (char c : s.toCharArray()) {
                list.get(i).append(c);
                i += flag;
                if (i == 0 || i == numRows - 1) {
                    flag = -flag;
                }
            }
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < list.size(); j++) {
                sb.append(list.get(j));
            }
    
            return sb.toString();
        }

    复杂度分析

    时间复杂度:O(n),遍历一遍字符串 s

    空间复杂度:O(n),各行字符串共占用 O(N)O(N) 额外空间

    技巧与心得

    1. 开一个github仓库用来记录各种题解
    2. 在idea或者vscode中都提供了leecode的插件刷题,方便调试断走流程
    3. 遇到不会的题不要慌,稳住心态直接看题解
    4. 文字类的表述不如视图类的直观,图文并茂精选图解优先或者参考leetcode国际站的大牛题解
    5. 图解依旧看着吃力也无妨,可以在哔哩哔哩或者YouTube上,通过leecode + 题号,搜索高收视率的视频观看
    6. 多看几次本文跟我学:LeetCode刷题大法,相信我你肯定能越刷越自信

    最后的最后

    看到最后,我相信你对本题应该有不一样的感受了吧!在此若有不对之处或建议等,留言告诉我;若有疑惑或者不一样的看法,也请告诉我,我们可以一起探讨学习!

    我是Yangcy,该吃吃该喝喝,该学还得学,我们一起加油!

    点击左下角了解更多,查看所有LeetCode优质题解代码

    相关推荐

    Go语言泛型-泛型约束与实践(go1.7泛型)

    来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

    golang总结(golang实战教程)

    基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

    Go 官宣:新版 Protobuf API(go pro版本)

    原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

    Golang开发的一些注意事项(一)(golang入门项目)

    1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

    golang 托盘菜单应用及打开系统默认浏览器

    之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

    golang标准库每日一库之 io/ioutil

    一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

    文件类型更改器——GoLang 中的 CLI 工具

    我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

    Go (Golang) 中的 Channels 简介(golang channel长度和容量)

    这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

    Golang引入泛型:Go将Interface「」替换为“Any”

    现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

    一文带你看懂Golang最新特性(golang2.0特性)

    作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

    Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

    以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

    Golang使用grpc详解(golang gcc)

    gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

    Etcd服务注册与发现封装实现--golang

    服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

    Golang:将日志以Json格式输出到Kafka

    在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

    如何从 PHP 过渡到 Golang?(php转golang)

    我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...