主要是复习了sprintf函数,快速排序的灵活运用。
一、题干:
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:”210”示例 2:
输入:nums = [3,30,34,5,9]
输出:”9534330”示例 3:
输入:nums = [1]
输出:”1”示例 4:
输入:nums = [10]
输出:”10”提示:
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 109
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解答:
题目难点在于解决先后排序问题:即在新的大小定义下调整顺序,用qsort函数加自定义比较函数cmp可以解决。
如何比较谁应该前置?我们可以先将相邻两个数链接组合,比较两种序列大小(比如12和3就应该比较123和312),选取较大数并将顺序重排。对整个数列操作后得到最大数列,再利用sprintf插入。
1 | int cmp(int *a,int *b){ |
三、关于函数sprintf:
这个函数在C语言库的<stdio.h>中就有,以下是sprintf函数的声明:
1 | int sprintf(char *str, const char *format, ...) |
str–即是我们要写入的对象,指向一个字符数组
format–是一个字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
附加参数 – 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
如果成功,则会返回写入字符长度(不包含’\0’),失败返回一个负数。
详细说明链接: