我正在尝试解决C语言中的Leetcode问题。 https://leetcode.com/problems/pascals-triangle/description/
这是我解决问题的方法。
我不认为解决方案存在问题,但为// Read data using username and password
public function login($username, $password) {
$this->db->select('username');
$this->db->from('user_register');
$this->db->where(array('username' => $username, 'password' => $password));
$query = $this->db->get();
$user_data = $query->row_array();
if ($query->num_rows() == 1) {
return user_data;
} else {
return false;
}
}
动态分配内存变得非常复杂。有人可以帮我弄清楚如何正确地将内存分配给2D array
。根据BLUEPIXY建议更新了代码,我似乎仍然遇到运行时错误。
2D array
答案 0 :(得分:0)
就这样做
int *arr = (int *)malloc(r * c * sizeof(int));
并访问像这样的元素
int i, j, count = 0;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++)
*(arr + i*c + j) = ++count;
或强>
如果你有指向指针的指针,那么你可以从这段代码获得一些帮助
int main()
{
int i,j;
int **p;
(p)=(int**)malloc(5*sizeof(int*));
for(i=0;i<5;i++)
*(p+i)=(int*)malloc(4*sizeof(int));
for(i=0;i<5;i++)
for(j=0;j<4;j++)
p[i][j]=2;
for(i=0;i<5;i++)
for(j=0;j<4;j++)
printf("%d",p[i][j]);
}
答案 1 :(得分:0)
如果你需要为编程练习做的就是打印结果,为什么还要打扰任何存储?在这里使用解决方案。
How to efficiently calculate a row in pascal's triangle?
关于多维数组和C,没有这种东西的原生支持。因此,您必须使用一个或多个1-D存储块和技巧来构建自己的存储和技巧,以便为该存储建立索引。
最简单的事情,@ tanuj-yadav建议适用于大多数2-d数组,只需分配一个nXm长度的存储块,并进行非常简单的索引算法arr [i * c + j]。
另一种常见的方法是数组数组(也称为不规则数组)。这就像一个列表列表,并且每行(或列)都使用malloc天真地完成。
答案 2 :(得分:0)
新版本的问题
(1)
columnSizes = (int **)malloc(numRows * sizeof(int *));
for (i=0; i<numRows; i++)
columnSizes[i] = (int *)malloc( sizeof(int));
应该是
*columnSizes = malloc(numRows * sizeof(int));
(※没有必要从C中void *
施放。
(2)
*columnSizes =1;//type of `*columnSizes` is `int *`
应该是
**columnSizes = 1;//meant columnSizes[0] = 1; at caller side (main)
(3)
columnSizes[i][j] = returnArray[i-1][j];
...
columnSizes[i][j] = returnArray[i-1][j-1];
应该是
returnArray[i][j] = returnArray[i-1][j];
...
returnArray[i][j] = returnArray[i-1][j-1];
因为这是错字。
(4)
numColumns++;
移至for(j=0;j<numColumns;j++){ }
(5)
*(columnSizes+i) = numColumns-1;
应该是
*(*columnSizes+i) = numColumns-1;//For reasons similar to (2)
整个修复代码:
int** generate(int numRows, int** columnSizes) {
int i=0,j=0,numColumns =2;
*columnSizes = malloc(numRows * sizeof(int));
int **returnArray = (int **)malloc(numRows * sizeof(int *));
for (i=0; i<numRows; i++)
returnArray[i] = (int *)malloc((i+1) * sizeof(int));
returnArray[0][0] = 1;
**columnSizes = 1;
for(i=1;i<numRows;i++)
{
for(j=0;j<numColumns;j++)
{
if(j==0 )
returnArray[i][j] = returnArray[i-1][j];
else if(j==(numColumns-1))
returnArray[i][j] = returnArray[i-1][j-1];
else
returnArray[i][j] = returnArray[i-1][j-1] + returnArray[i-1][j];
}
numColumns++;
*(*columnSizes+i) = numColumns-1;
}
return returnArray;
}