i am trying to solve leetcode question :-
https://leetcode.com/problems/largest-number/ 给定一个非负整数列表,将它们排列成最大数字。
例如,给定[3,30,34,5,9],最大形成数为9534330。 我试图通过定义比较器来对字符串进行排序,以通过从右到左或从左到右的方式来比较字符串。
该程序给出了运行时错误。请帮帮....
int comp(const void* a, const void* b){
int p = *((int *)a);
int q = *((int *)b);
int size = 14;
char * first = (char *)malloc(size * sizeof(char));
char * second = (char *)malloc(size * sizeof(char));
first[0] = "\0";
second[0] = "\0";
sprintf(first, "%d",p);
sprintf(first, "%d",q);
sprintf(second, "%d",q);
sprintf(second, "%d",p);
return -1*strcmp(first, second);
}
char* largestNumber(int* nums, int numsSize) {
if(numsSize <=0)
return NULL;
qsort(nums, numsSize, sizeof(int), comp);
char * result = (char*)malloc(numsSize *5*sizeof(char));
int i;
for(i=0; i<numsSize; i++)
result = strcat(result, nums[i]);
return result;
}
答案 0 :(得分:1)
malloc()
分配内存并将其丢弃是一种不好的做法。
由于您始终在comp
中分配固定数量的内存,因此请使用常规数组。first[0] = "\0";
,它指定一个指向char
变量的指针。
同时删除无用的sprintf
,其结果很快就会被覆盖。int
有4个字节,则为每个元素分配5个字节可能太小。分配更多内存。result
指向的缓冲区,然后将其传递给strcat()
。strcat()
之前将整数转换为字符串。malloc()
in C。可能的修复(未测试):
int comp(const void* a, const void* b){
int p = *((int *)a);
int q = *((int *)b);
char first[14];
char second[14];
sprintf(first, "%d", q);
sprintf(second, "%d", p);
return -1 * strcmp(first, second);
}
char* largestNumber(int* nums, int numsSize) {
if(numsSize <= 0)
return NULL;
qsort(nums, numsSize, sizeof(int), comp);
char * result = malloc(numsSize * 14 * sizeof(char));
int i;
result[0] = '\0';
for(i = 0; i < numsSize; i++) {
char num[14];
sprintf(num, "%d", nums[i]);
result = strcat(result, num);
}
return result;
}