首页 > 其他 > 详细

Largest Number

时间:2015-12-02 22:23:03      阅读:262      评论:0      收藏:0      [点我收藏+]

Given a list of non negative integers, arrange them such that they form the largest number.

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.

Note: The result may be very large, so you need to return a string instead of an integer.

 

C语言版本:

int getSize(int num)
{
    int n = 0;
    if (num == 0)
        return 1;
    while (num)
    {
        n++;
        num /= 10;
    }
    return n;
}
char *itoa(int num)
{
    int size = getSize(num);
    char *result = malloc(sizeof(char) * ( size + 1));
    result[size] = 0;
    while(size)
    {
        result[size - 1] = num % 10 + 0;
        size--;
        num /= 10;
    }
    return result;
}
int numCmp(int left, int right)
{
    int left_size = getSize(left);
    int right_size = getSize(right);
    int result = 0;
    char *left_c = NULL, *right_c = NULL;
    char *left_tmp = itoa(left);
    char *right_tmp = itoa(right);
    left_c = malloc(sizeof(char) *(left_size + right_size + 1));
    right_c = malloc(sizeof(char) *(left_size + right_size + 1));
    strcpy(left_c, left_tmp);
    strcpy(right_c, right_tmp);
    strcat(left_c, right_tmp);
    strcat(right_c, left_tmp);
    result = strcmp(left_c, right_c);
    free(left_tmp);
    free(right_tmp);
    free(left_c);
    free(right_c);
    return result;
}
char* largestNumber(int* nums, int numsSize) {
    int i = 0;
    int max = 0;
    int left = 0, right = 0;
    int n = 0;
    char *result = NULL;
    if (numsSize == 0)
        return NULL;
    for (; i < numsSize; i++)
    {
        max = nums[i];
        for (int j = i + 1; j < numsSize; j++)
        {
            if (numCmp(nums[j], nums[i]) > 0)
            {
                nums[i] = nums[j];
                nums[j] = max;
                max = nums[i];
            }
        }
        n += getSize(max);
    }
    result = (char *)malloc(sizeof(char)* (n + 1));
    result[n] = 0;
    i = 0;
    for (int j = 0; j < numsSize; j++)
    {
        
        int index = 0;
        max = nums[j];        
        index = getSize(max);
        n = index;
        if (max == 0)
            result[i] = 0;
        else{
            while (index)
            {
                result[index + i - 1] = max % 10 + 0;
                max /= 10;
                index--;
            }
        }
        i += n;
    }
    if(result[0] == 0)
    return "0";    //当为“000000”都为0时,则只输出一个“0”;
    return result;
}
  • sizeof(),和strlen();对于指针的使用,差别还是很大的
    • sizeof只有在数组时才会去读取数组个数的和,其他情况都为指针大小
  • 注意要区分0的时候

Largest Number

原文:http://www.cnblogs.com/dylqt/p/5014159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!