当前位置:网站首页>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
采用快速排序; - 空间复杂度:不好描述,主要原因在于创建了很多辅助字符数组。
欢迎评论区交流~
边栏推荐
猜你喜欢
一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
Ontology Development Diary 03 - When debugging is in progress
latex中复杂公式换行等号对齐
[Personal study summary] CRC verification principle and implementation
.equals ==
How much do you know about the mobile APP testing process specifications and methods?
Do you know the basic process and use case design method of interface testing?
软件测试面试中,面试官问你一些比较“刁难”的问题你会怎么回答
性能测试报告包括哪些内容?模板范文哪里找?看这里
STM32F103实现IAP在线升级应用程序
随机推荐
pycharm在创建py文件时如何自动注释
MySQL索引、视图、设计三范式,通俗易懂,不可错过!
3. Coding method
条件和递归
8.Properties property collection
软件测试的流程规范有哪些?具体要怎么做?
Openwrt配置Aria2(Hg255d)
可以写进简历的软件测试项目实战经验(包含电商、银行、app等)
字符串
全网最全的软件测试基础知识整理(新手入门必学)
恶意软件查杀工具分享
RPC服务远程漏洞
1.流的概念
关于一次性通过CISSP考试的一点经验分享
软件测试个人求职简历该怎么写,模板在这里
Another implementation of lateral view explode
命令行查询数据库
Rights management model, ACL, RBAC and ABAC (steps)
Ontology Development Diary 03 - When debugging is in progress
常用的一些制表符号