当前位置: 首页 > article >正文

【LeetCode】06.Z字形变换

题目要求

在这里插入图片描述

解题思路

首先映入我们脑海的就是暴力。这一方法可行,但是时间复杂度空间复杂度很高,因此我们使用找规律的方法。这样的话我们可以模拟插入下标,这样的话很容易发现首行和末行插入的位置刚好是d=2*n-2,而中间行的两个位置的下标之和刚好为d的整数倍。

代码实现

class Solution 
{
public:
    string convert(string s, int numRows) 
    {
        //处理特殊情况
        if(numRows==1)  return s;
        //确定返回值
        string ret;
        int n=s.size(),d=numRows*2-2;
        //第一行
        for(int i=0;i<n;i+=d)
            ret+=s[i];
        //中间行
        for(int k=1;k<numRows-1;k++)
        {
            for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d)
            {
                if(i<n) ret+=s[i];
                if(j<n) ret+=s[j];
            }
        }
        //最后一行
        for(int i=numRows-1;i<n;i+=d)
        {
            ret+=s[i];
        }
        return ret;
    }
};

http://www.kler.cn/a/293272.html

相关文章:

  • 01:(手撸HAL+CubeMX)时钟篇
  • LeetCode 86.分隔链表
  • 【算法一周目】双指针(2)
  • apache2配置多站点
  • 响应式网页设计--html
  • C++ 的协程
  • 011.Python爬虫系列_bs4解析
  • Java easypoi导出word表格显示
  • RAML学习
  • VBA进行excel坐标转换
  • CSP-S 2022 提高级 第一轮 阅读程序(3)
  • Redis进阶(五):集群
  • AWS-亚马逊网络服务(基础服务)-AWS 定价计算器-概述与动手部署:
  • c++ 实现线程池
  • 关于pip和conda环境路径不同的解决办法。
  • Mysql递归查询
  • 蜜罐网络MHN安装过程中的坑
  • Webpack 的loader和plugin原理
  • 类比推理-错题集
  • SpringBoot开发——如何防御XSS攻击
  • sqli-labs靶场(56-60)
  • 云计算之ECS
  • 常工院星闪节能团队参加悉尼大学设计交流项目
  • 中间代码例题
  • OSPF 协议介绍
  • Zipkin链路追踪②:如何集成?