将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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

开始没有思路,看完官方的思路和代码然后这样做的

char* convert(char* s, int numRows) {
if (numRows == 1||numRows==0)
return s;
int n=strlen(s);
if(n==0||n==1||n==2) return s;
char *re = (char *)malloc((n + 1) * sizeof(char));
int j, k = 0;
for (int i = 0; i < numRows; i++) {
j = i;
while (j < n) {
re[k++] = s[j];
if (i != 0 && i != numRows - 1 && j + 2 * (numRows - 1 - i) < n)
re[k++] = s[j + 2 * (numRows - 1 - i)];
j += 2 * numRows - 2;
}
}
re[n] = '\0';
return re;
}

但是这样算法的复杂度有点高,大概是0(numRows+n)吧,后来看了下评论,发现一个比较优化的解法

,也是逐行处理,但是算法的复杂度貌似缩小到了0(n),大概思路是先遍历0行,然后是i行,然后是剩下的

代码如下:

char* convert(char* s, int numRows) {
//获取s长度
if(numRows==1)return s;
int len=strlen(s);
if(len==1||len==2) return s;
//定义循环变量
char* ret=(char *)malloc(sizeof(char)*(len+1));
int i,j=0,k=0;
//判断不形成z字
//定义指针变量
for(i=0;i<len;i=k*(2*numRows-2))
{
ret[j++]=s[i];
k++;
}
//判断满足那个条件
for(i=1;i<len-1;i++)
{
k=0;
while(k*(2*numRows-2)+i<len)
{
//按照索引添加
ret[j++]=s[k*(numRows-2)+i];
if((k+1)*(2*numRows-2)-i<len) ret[j++]=s[(k+1)*(2*numRows-2)-i];
k++;
} }
k=0;
for(i=numRows-1;i<len;i=k*(2*numRows-2)+numRows-1)
{
ret[j++]=s[i];
k++;
}
ret[j]='\0';
return ret;
}

leetcode刷题六<z字形变换>的更多相关文章

  1. Leetcode(6)Z字形变换

    Leetcode(6)Z字形变换 [题目表述]: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...

  2. leetcode第6题:Z字形变换--直接模拟求解法

    [题目描述] 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: 之后,你 ...

  3. 【LeetCode】ZigZag Conversion(Z 字形变换)

    这道题是LeetCode里的第6道题. 题目要求: 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" ...

  4. Leetcode题库——6.Z字形变换

    @author: ZZQ @software: PyCharm @file: convert.py @time: 2018/9/20 20:12 要求: Z字形变换 将字符串 "PAYPAL ...

  5. Z 字形变换 C++实现 java实现 leetcode系列(六)

    Z 字形变换  java实现 C++实现  将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 ...

  6. C#版[击败100.00%的提交] - Leetcode 6. Z字形变换 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  7. Java实现 LeetCode 6 Z字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  8. LeetCode Golang 6. Z 字形变换

    6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  9. Leetcode刷题记录(python3)

    Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

随机推荐

  1. 使用原生 python 造轮子搭建博客

    这篇用来 记录一个 从零开始的 博客搭建,希望坚持下去,因为python 开发效率令人发指,所以会原生从零写 ORM ,Web 框架 前提是打好 异步 io 的基础, 使用异步,有一点要谨记,一旦开始 ...

  2. 定时调度系列之Quartz.Net详解

    一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "."每天的0点需要统计前一天的考勤记录"."每个月 ...

  3. Matplotlib图例

    折线图示例 #!/usr/bin/python2.7 import numpy as np from matplotlib import pyplot as plt from dbtools impo ...

  4. 《JAVA并发编程实战》示例程序第一、二章

    第一章:简介 程序清单1-1非线程安全的数值序列生成器 import net.jcip.annotations.NotThreadSafe; @NotThreadSafe public class U ...

  5. 一文说尽MySQL事务及ACID特性的实现原理

    MySQL 事务基础概念 事务(Transaction)是访问和更新数据库的程序执行单元:事务中可能包含一个或多个 sql 语句,这些语句要么都执行,要么都不执行.作为一个关系型数据库,MySQL 支 ...

  6. 扩展欧几里得(exgcd)与同余详解

    exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...

  7. 最小生成树(kruskal算法)

    首先明确三个概念: 1.最小生成树的特点? 答:假设某个连通网络由n个顶点组成,则其生成树必含n个顶点和n-1条边,而最小生成树的n-1条有个要求:总和最小. 2.并查集的运用? 答:在该问题中,首先 ...

  8. Eclipse 开发设置编码格式--4个修改地方完美

    背景:本人用这么久,因为大部分都是设定为UTF-8 就可以了,但是一些老项目居然是GBK格式,所以 工作空间.通常文件类型的编码都是UTF-8. 针对特殊项目设定特定格式,实际中本人对整个项目设定并不 ...

  9. Spring Boot系列(二) Spring Boot 之 REST

    Rest (Representational Stat Transer) 是一种软件架构风格. 基础理论 架构特性 性能 可伸缩 简化的统一接口 按需修改 组件通信透明 可移植 可靠性 架构约束 C/ ...

  10. CNN卷积神经网络

    import os # third-party library import torch import torch.nn as nn import torch.utils.data as Data i ...