c语言解决下述问题,力扣473火柴拼正方形
时间: 2024-12-21 13:24:21 浏览: 37
在C语言中解决LeetCode第473题“火柴棒拼正方形”(Largest Square),这个问题是一个经典的动态规划问题。题目要求利用给定的火柴棒数找到可以组成的最大正方形边长。你可以使用一个二维数组来保存每个位置上可以构成的正方形最大边长。
以下是C语言的一个基本解决方案:
#include <stdio.h>
int maxSquares(int* nums, int numsSize) {
int dp[numsSize][numsSize] = {0};
int maxLength = 0;
// 遍历输入数组
for (int i = 0; i < numsSize; ++i) {
for (int j = 0; j < numsSize; ++j) {
if (nums[i] >= j + 1) {
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + 1;
maxLength = max(maxLength, dp[i][j]);
}
}
}
return maxLength * maxLength;
}
// 辅助函数,计算并返回两个整数的最小值
int min(int a, int b) {
return a < b ? a : b;
}
int main() {
int nums[] = {1, 2, 5, 3, 6, 7}; // 示例输入
int numsSize = sizeof(nums) / sizeof(nums[0]);
int result = maxSquares(nums, numsSize);
printf("最大正方形边长为:%d\n", result);
return 0;
}
在这个代码里,dp[i][j]
表示以位置(i, j)
结束的最长连续序列能构成的正方形边长。我们从每一个位置开始,如果当前位置的火柴棒数大于等于当前位置到左上角的距离加一,那么就可以构成更大的正方形,此时更新dp
值。最后,最大正方形边长即为所有dp
值中的最大值。
阅读全文
相关推荐


















