我是一名新手程序员,正在尝试解决leetcode上的问题。我理解逻辑,我知道主要函数是如何在 leetcode 的后端以及如何以特定的指示方式返回。但是每次我编写代码时,它都会引发有关控制到达非 void 函数末尾的编译器错误,而且我似乎不知道如何应对此错误。请帮帮我。
我编写并一直尝试在leetcode上运行的代码(这是问题74:搜索二维矩阵):
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){
int x;
for(int i=0;i<matrixSize;i++){
if(target<=matrix[i][*matrixColSize-1])
x=i;
}
if(target>matrix[matrixSize-1][*matrixColSize-1])
return false;
for(int j=0;j<*matrixColSize;j++){
if(matrix[x][j]==target)
return true;
if(j==*matrixColSize-1 && matrix[x][j]!=target)
return false;
}
}
我似乎找不到代码有什么问题。即使我尝试将 return 命令移出 if 循环,它也会一直返回 false
编译器无法确定在
for
循环的最后一次迭代中,两个 if
条件之一保证为 true。所以它没有意识到你永远不会跳出循环并到达函数的末尾。
但是这是一种令人困惑的函数编写方式。将其更改为更简单的:
for(int j=0;j<*matrixColSize;j++){
if(matrix[x][j]==target)
return true;
}
return false;
执行完这个for循环后
for(int j=0;j<*matrixColSize;j++){
if(matrix[x][j]==target)
return true;
if(j==*matrixColSize-1 && matrix[x][j]!=target)
return false;
}
该函数不返回任何内容。您需要在 for 循环之后放置 return 语句。
或者您需要重写循环,以便在循环之后返回结果。
也不清楚为什么第三个参数是指针类型
int* matrixColSize
请注意,在 C 中,您可以使用可变长度数组来代替动态分配的数组。
另外一个备注是,而不是这个for循环
for(int i=0;i<matrixSize;i++){
if(target<=matrix[i][*matrixColSize-1])
x=i;
}
按顺序搜索行,您可以将二分搜索方法实现为上限方法,因为根据任务的描述,该行的每个第一个元素都大于前一行的最后一个元素。然后对于选定的行,您可以使用标准 C 函数
bsearch
。