当前位置:网站首页>LeetCode179:最大数(C语言)代码简洁!
LeetCode179:最大数(C语言)代码简洁!
2022-08-09 09:29:00 【农场主er】
题目描述
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
示例 :
输入: [3,30,34,5,9]
输出: 9534330
说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。
思路分析
首先肯定不能按照整数大小进行排序,比较的规则如下:
- 将整数a、b分别转化为字符串s1、s2;
- 比较
s1+s2
和s2+s1
(+表示拼接)的大小,根据结果再对a、b进行排序。
C语言代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//设置字符数组最大(默认)长度
#define MAX_BUFFER 512
//设置比较器
//解释:传入参数*a、*b对应的数组下标前者大吗,当返回值为负值时二者交换位置
int cmpfunc(const void * a, const void * b)
{
char s1[MAX_BUFFER];
char s2[MAX_BUFFER];
//发送格式化输出到 s1、s2 所指向的字符串
sprintf(s1, "%d%d", *(int*)a, *(int*)b);
sprintf(s2, "%d%d", *(int*)b, *(int*)a);
return strcmp(s2, s1);
}
char * largestNumber(int* nums, int numsSize) {
//根据比较器排序数组,好处在于排序前后数组元素类型都没有变化
qsort(nums, numsSize, sizeof(int), cmpfunc);
//特殊情况的处理
if (nums[0] == 0) {
return (char *)"0";
}
char *result = (char*)malloc(sizeof(char)*MAX_BUFFER);
char *tem = result;
for (int i = 0; i < numsSize; i++) {
//在流指针之后将整数传递进tem字符串中
sprintf(tem, "%d", nums[i]);
//移动指针位置,相当于拼接
tem += strlen(tem);
}
return result;
}
代码总结
- 很多类库函数如
sprintf、strcat
,由于安全性的问题,在VS中编译的时候会出现很出问题…建议测试的时候还是在网页中进行; - 还有运用字符串拼接函数
strcat
解题的思路。问题在于控制台运行没有错误,一提交结果就莫名其妙多出来几个数字,如果有心人发现了错误,还请指出。
//只改变了最后几行代码
char result[MAX_BUFFER];
char tem[MAX_BUFFER];
char *a=result;
for (int i = 0; i < numsSize; i++) {
sprintf(tem, "%d", nums[i]);
strcat(result,tem);
}
return a;
复杂度分析
- 时间复杂度:
O(n lg n)
。由排序算法决定,qsort
采用快速排序; - 空间复杂度:不好描述,主要原因在于创建了很多辅助字符数组。
欢迎评论区交流~
边栏推荐
猜你喜欢
mysql简单安装
web测试之功能测试常用的方法有哪几种?有什么要点要注意?
How much do you know about the mobile APP testing process specifications and methods?
STM32F103实现IAP在线升级应用程序
秒拍app分析
自动化测试框架有哪几种?搭建的思路是什么?一篇文章让你彻底了解自动化
Cisco common basic configuration of common commands
测试用例的原则、缺陷报告怎么写你都知道吗?
在anaconda环境中配置cuda和cudnn
软件测试流程包括哪些内容?测试方法有哪些?
随机推荐
8. Recursively traverse and delete cases
可以写进简历的软件测试项目实战经验(包含电商、银行、app等)
接口开发规范及测试工具的使用
秒拍app分析
Go-goroutine 的那些事
.ts 音频文件转换成 .mp3 文件
The div simulates the textarea text box, the height of the input text is adaptive, and the word count and limit are implemented
【个人学习总结】CRC校验原理及实现
mysql 修改密码和忘记密码操作
白盒测试的概念、目的是什么?及主要方法有哪些?
"The camera can't be used" + win8.1 + DELL + external camera + USB drive-free solution
本体开发日记02-sparql简单查询
2.Collection interface
【机器学习】数据科学基础——机器学习基础实践(二)
Golang Protobuf 处理
游戏测试的概念是什么?测试方法和流程有哪些?
LPP代码及其注释
Go-接口的那些事
网络安全入门基础:IP地址
自动化测试框架有哪几种?搭建的思路是什么?一篇文章让你彻底了解自动化