728. 自除数 - 力扣(LeetCode)
#include <stdlib.h>
int* selfDividingNumbers(int left, int right, int* returnSize) {
int* result = (int*)malloc((right - left + 1) * sizeof(int));
if (result == NULL) {
// 内存分配失败
*returnSize = 0;
return NULL;
}
int count = 0; // 用于跟踪结果数组中的自除数数量
for (int i = left; i <= right; i++) {
int temp = i;
int divisible = 1;
// 检查当前数字是否为自除数
while (temp > 0) {
int digit = temp % 10;
if (digit == 0 || i % digit != 0) {
divisible = 0;
break;
}
temp /= 10;
}
// 如果是自除数,则添加到结果数组中
if (divisible) {
result[count++] = i;
}
}
// 设置返回数组的大小
*returnSize = count;
return result;
}
238. 除自身以外数组的乘积 - 力扣(LeetCode)
#include <stdlib.h>
int* productExceptSelf(int* nums, int numsSize, int* returnSize) {
if (nums == NULL || numsSize == 0) {
*returnSize = 0;
return NULL;
}
*returnSize = numsSize;
int* answer = (int*)malloc(numsSize * sizeof(int));
int* leftProducts = (int*)malloc(numsSize * sizeof(int));
int* rightProducts = (int*)malloc(numsSize * sizeof(int));
// 初始化左侧乘积数组,第一个元素左侧没有元素,乘积为1
leftProducts[0] = 1;
for (int i = 1; i < numsSize; ++i) {
leftProducts[i] = leftProducts[i - 1] * nums[i - 1];
}
// 初始化右侧乘积数组,最后一个元素右侧没有元素,乘积为1
rightProducts[numsSize - 1] = 1;
for (int i = numsSize - 2; i >= 0; --i) {
rightProducts[i] = rightProducts[i + 1] * nums[i + 1];
}
// 计算答案数组
for (int i = 0; i < numsSize; ++i) {
answer[i] = leftProducts[i] * rightProducts[i];
}
// 释放辅助数组
free(leftProducts);
free(rightProducts);
return answer;
}