《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2336字,纯文字阅读大概需要4分钟。
内容图文
![《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)](/upload/InfoBanner/zyjiaocheng/1044/80c6b7f4a7174b69bb0740400bd05467.jpg)
库你急哇,哈集美马戏特~~
生气是无能的表现,这道题真得让我很生气!!!!
我以前觉得我不笨,我现在觉得我以前觉得错了
本次采用官方题解1,思路是真的好,吊打我的2维数组,感觉看了官方的思路之后,它的代码竟然会动(-_-)
在这里还要感谢一下帮助我解决内存溢出的问题的大佬,ZHYyyds(@-@)
先写一下执行错误吧,有遇到的同学可以想一下为什么result在malloc的时候,长度要写成len+1,这就是问题的关键
AddressSanitizer: heap-buffer-overflow on address 0x60200000025e at pc 0x5652e8e3754b bp 0x7ffd15536510 sp 0x7ffd15536500
和官方给的一个看不懂是什么的报错
题目:
将一个给定字符串 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);
示例 1:
输入:s = “PAYPALISHIRING”, numRows = 3
输出:“PAHNAPLSIIGYIR”
示例 2:
输入:s = “PAYPALISHIRING”, numRows = 4
输出:“PINALSIGYAHRPI”
解释:
P I N
A L S I G
Y A H R
P I
示例 3:
输入:s = “A”, numRows = 1
输出:“A”
提示:
1 <= s.length <= 1000
s 由英文字母(小写和大写)、',' 和 '.' 组成
1 <= numRows <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码(经过线上OJ测试)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
char ch;
struct node *next;
}Node;
char * convert(char * s, int numRows){
if(numRows==1)
{
return s;
}
int len=strlen(s);
if(len==0||numRows<=0)
{
return NULL;
}
int small=(len>numRows)?numRows:len;
Node *x[small];
Node *end[small];
int i=0;
for(i=0;i<small;i++)
{
x[i]=(Node *)malloc(sizeof(Node));
x[i]->ch='\0';
end[i]=x[i];
}
int cutRow=0;
int goingDown=0;
for(i=0;i<len;i++)
{
end[cutRow]->ch=s[i];
end[cutRow]->next=(Node *)malloc(sizeof (Node));
end[cutRow]=end[cutRow]->next;
end[cutRow]->ch='\0';
if(cutRow==0||cutRow==small-1)
{
goingDown=(goingDown+1)%2;
}
cutRow=cutRow+(goingDown?1:-1);
}
char *result=(char *)malloc(sizeof(char)*(len+1));
memset(result,'\0',len+1);
int n=0;
for(i=0;i<small;i++)
{
while(x[i]->ch!='\0')
{
result[n]=x[i]->ch;
n++;
x[i]=x[i]->next;
}
}
return result;
}
int main()
{
char test[]="PAYPALISHIRING";
int numRows = 3;
char *result=convert(test,numRows);
printf("%s",result);
return 0;
}
内容总结
以上是互联网集市为您收集整理的《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)全部内容,希望文章能够帮你解决《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。