LeetCode 面试经典150题 Z字形变换

题目

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

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

复制代码
P   A   H   N
A P L S I I G
Y   I   R

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

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

复制代码
string convert(string s, int numRows);

思路

代码

java 复制代码
class Solution {
    public String convert(String s, int numRows) {
        if (numRows == 1) 
            return s;
        int len = Math.min(s.length(), numRows);
        String[] rows = new String[len];
        for (int i = 0; i < len; i++)
            rows[i] = "";
        int loc = 0;
        boolean down = false;

        for (int i = 0; i < s.length(); i++) {
            rows[loc] += s.substring(i, i + 1);
            if (loc == 0 || loc == numRows - 1) // 因为是Z字形,所以从上往下再从下往上
                down = !down;
            loc += down ? 1 : -1;
        }
                
        String ans = "";
        for (String row : rows) {
            ans += row;
        }
        return ans;
    }
}

性能

时间复杂度o(n)

空间复杂度o(n)

相关推荐
sheeta199820 小时前
LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环
笔记·算法·leetcode
罗超驿20 小时前
10.滑动窗口解决:无重复字符的最长子串 | LeetCode 3 Java 题解
java·算法·leetcode·面试
罗超驿20 小时前
8.【LeetCode 18】四数之和 —— Java 排序 + 双指针解法详解
算法·leetcode·职场和发展
海南java第二人21 小时前
ClickHouse 实际应用类面试通关:项目案例、生产踩坑与实战经验
clickhouse·面试·实际应用类
野生技术架构师21 小时前
2026最新Java面试1200题全解析:从基础到架构,覆盖所有技术栈(含答案)
java·面试·架构
菜菜的顾清寒21 小时前
HOT100力扣(40) 动态规划-爬楼梯
算法·leetcode·动态规划
m沐沐21 小时前
【机器学习】聚类算法-K-means聚类
人工智能·python·算法·机器学习·pycharm·kmeans·聚类
z落落21 小时前
C# Dictionary 字典集合+数组、List、Dictionary 三者终极对比
算法
醇氧21 小时前
排队论(牛吃草问题)解题全解析
算法
蓝速科技21 小时前
3D 数字人全息舱算力部署方案对比:本地 X86 独显架构与云端 RK 架构怎么选才好
数据结构·人工智能·算法·架构·排序算法