把数组排成最小的数(报错求指教)
把数组排成最小的数
【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
代码如下: const int g_MaxNumberLength = 10;
char *g_StrCombine1 = new char[g_MaxNumberLength * 2 + 1];
char *g_StrCombine2 = new char[g_MaxNumberLength * 2 + 1];
int compar(const void* strNumber1, const void* strNumber2)
{
strcpy(g_StrCombine1, *(const char **)strNumber1);
strcat(g_StrCombine1, *(const char **)strNumber2);
strcpy(g_StrCombine2, *(const char **)strNumber2);
strcat(g_StrCombine2, *(const char **)strNumber1);
return strcmp(g_StrCombine1, g_StrCombine2);
}
class Solution {
public:
string PrintMinNumber(vector<int> numbers) {
int size = numbers.size();
string MinNumber;
if (size<=0)
return MinNumber;
char **strNumbers = (char**)(new int[size]);
for (int i = 0; i<size; ++i)
{
strNumbers[i] = new char[g_MaxNumberLength + 1];
sprintf(strNumbers[i], "%d", numbers[i]);
}
qsort(strNumbers, size, sizeof(char*), compar);
for (int i = 0; i<size; ++i)
{
MinNumber += strNumbers[i];
}
return MinNumber;
}
};
以上代码在VS2013中测试可以通过,但是提交到牛客网上报错如下:
不通过
您的代码已保存
运行错误:请检查是否存在数组、列表等越界非法访问,内存非法访问等情况
case通过率为0.00%
运行错误:请检查是否存在数组、列表等越界非法访问,内存非法访问等情况
case通过率为0.00%
请大神指教!谢谢!