力扣第六题始终在报内存泄露,但我实在找不到问题出在哪里,求看
题目为:
将一个给定字符串 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);
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zigzag-conversion
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
char * convert(char * s, int numRows){
int len=strlen(s);
char **line = (char **)malloc(sizeof(char*)*numRows);
for(int i=0;iline[i]=(char*)malloc(sizeof(char)*1001);
memset(line[i],0,sizeof(char)*1001);
// for(int j=0;j<1001;j++){
// line[i][j]=0;
// }
}//ok
int flag=0;//flag=0向下,flag=1向上
int col[numRows];//col数组用于记录各line记录到第几列
int row=0;//row用于记录line记录到第几行,row初值为0
for(int i=0;i0;//col[]初值都为0
}
for(int i=0;iline[row][col[row]]=s[i];
col[row]++;
if(numRows==1){
row=0;
}else{
if(row==numRows-1&&flag==0) flag=1;//边界:numRows=1时
if(row==0&&flag==1) flag=0;
if(flag==0&&row!=numRows-1){//向下
row++;
}else if(flag==1&&row!=0){//向上
row--;
}
}//else
}//for
char *res=(char*)malloc(sizeof(char)*len);
for(int i=0;i0;
}
int number=0;
for(int i=0;iint j=0;
while(line[i][j]!=0){
res[number]=line[i][j];
j++;
number++;
}
}
return res;
}
没有free
尝试一些下面的代码,看看行不行,如果可以请点击采纳:
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
int len = s.length();
int cycleLen = 2 * numRows - 2;
StringBuilder res = new StringBuilder();
for (int i = 0; i < numRows; i++) {
for (int j = 0; j + i < len; j += cycleLen) {
res.append(s.charAt(j + i));
if (i != 0 && i != numRows - 1 && j + cycleLen - i < len) {
res.append(s.charAt(j + cycleLen - i));
}
}
}
return res.toString();
}
}