讨论/算法和数据结构/相同的输入,为什么在本地vscode上面编译输出的结果和leetcode上测试代码的结果相同且正确,但是提交时却会显示执行错误/
相同的输入,为什么在本地vscode上面编译输出的结果和leetcode上测试代码的结果相同且正确,但是提交时却会显示执行错误

相同的输入,为什么在本地vscode上面编译输出的结果和leetcode上测试代码的结果相同且正确,但是提交时却会显示执行错误

本人这周才开始坚持在leetcode上每天刷一道题,今天在做第6题时,遇到了如题的情况,请问各位大神这个情况出现的原因是什么呀?
(我用的相当于是很简单的暴力法,而且函数里也没有定义全局变量之类的东西,出现了这个情况,很糊涂。。)
第六题大致如下:
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 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
E O E I I
E C I H N
T S G

我的代码如下:

class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows>=s.length() || numRows==1 || s.length()<=1){
            return s;
        }
        int length=s.length();
        int y=(length-1)/(2*numRows-2)+1;
        int col=1+y+(numRows-2)*y;
        char array[numRows][col];
        int row=0;
        int coll=0;
        int flag=0;
        string news('a',length);
        for(int i=0;i<length;i++){
            if(numRows==2){
                array[row][coll]=s[i];
                row++;
                if(row==2){
                    row=0;
                    coll++;
                }
            }
            else{
                if(flag==0 && row<numRows){
                    array[row][coll]=s[i];
                    row++;
                    // array[row][coll]=s[i];
                    if(row==numRows){
                        flag=1;
                    }
                }
                else if(flag==1 && row>0){
                    if(row==numRows){
                        row-=2;
                        coll++;
                    }
                    array[row][coll]=s[i];
                    if(row==1){
                        flag=0;
                    }
                    row--;
                    coll++;
                }   
            }
        }
        int k=0;
        for(int i=0;i<numRows;i++){
            for(int j=0;j<col;j++){
                if(((int)array[i][j]>=65 && (int)array[i][j]<=90)){
                    news[k]=array[i][j];
                    k++;
                }
            }
        }
        return news.substr(0,length);
    }
};
这个是本地vscode上面的执行结果

leetcode6-2.png

这个是用例测试
leetcode6-0.png

这个是提交结果
leetcode6-1.png


还请各位大佬指点迷津。

展开讨论
Poemya发起于 2020-05-16

函数内部的变量是不会初始化的,您可以试着用memset将array初始化一下。