剑指OFFER之把数组排成最小的数(九度OJ1504)
题目描述:
-
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- 输入:
-
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
输入的第二行包括m个正整数,其中每个正整数不超过10000000。
- 输出:
-
对应每个测试案例,
输出m个数字能排成的最小数字。
- 样例输入:
- 样例输出:
解题思路:
首先,最普通的思路就是权进行一次排列,找出最小的数。但是这样可能会超时。
这里,我们首先对数列进行排序,最后进行一次整合。算法上面主要采取冒泡排序,对每个数与其前面的数进行比较。
void bubbleSort(char c[][],int n){
int i,j;
for( i=n- ; i> ; i-- ){
for(j = n-;j>(n--i);j--){
if(findSmall(c,j))
swap(c,j,j-);
}
}
}
在比较时,采用特别的思路----把两个字符串进行拼接,如果字符串1排在前面的数小,那么就把字符串1放到前面。
int findSmall(char c[][10],int i){
char stri[20];
char strj[20];
strcpy(stri,c[i]);
strcpy(strj,c[i-1]);
strcat(stri,c[i-1]);
strcat(strj,c[i]);
int k;
int length = strlen(stri);
for(k=0;k<length;k++){
if(stri[k] == strj[k])
continue;
else if(stri[k] < strj[k]){
return 1;
}else{
return 0;
}
}
}
排序后,可以保证直接进行连接的数列是最小的。
全部代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubbleSort(char c[][],int n);
int findSmall(char c[][],int i);
void swap(char c[][],int i,int j);
int main(){
int n,i;
while(scanf("%d",&n)!=EOF && n> && n<= ){
int arr[];
char c[][];
char string[];
for(i=;i<n;i++){
scanf("%d",&arr[i]);
sprintf(c[i],"%d",arr[i]);
}
bubbleSort(c,n);
strcpy(string,c[]);
for(i=;i<n;i++){
strcat(string,c[i]);
}
printf("%s\n",string);
}
return ;
}
void bubbleSort(char c[][],int n){
int i,j;
for( i=n- ; i> ; i-- ){
for(j = n-;j>(n--i);j--){
if(findSmall(c,j))
swap(c,j,j-);
}
}
}
int findSmall(char c[][],int i){
char stri[];
char strj[];
strcpy(stri,c[i]);
strcpy(strj,c[i-]);
strcat(stri,c[i-]);
strcat(strj,c[i]);
int k;
int length = strlen(stri);
for(k=;k<length;k++){
if(stri[k] == strj[k])
continue;
else if(stri[k] < strj[k]){
return ;
}else{
return ;
}
}
}
void swap(char c[][],int i,int j){
char tmp[];
int k;
for(k=;k<;k++){
tmp[k] = c[i][k];
c[i][k] = c[j][k];
c[j][k] = tmp[k];
}
}
/**************************************************************
Problem: 1504
User: xhalo
Language: C
Result: Accepted
Time:320 ms
Memory:916 kb
****************************************************************/
剑指OFFER之把数组排成最小的数(九度OJ1504)的更多相关文章
- 剑指Offer:把数组排成最小的数【45】
剑指Offer:把数组排成最小的数[45] 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如,输入数组是{3.32.321},则打印出来的这3 ...
- 力扣 - 剑指 Offer 45. 把数组排成最小的数
题目 剑指 Offer 45. 把数组排成最小的数 思路1 将整数数组转化成字符串数组 然后使用Arrays工具类的sort方法帮助我们排序 代码 class Solution { public St ...
- 【剑指Offer】把数组排成最小的数 解题报告(Python)
[剑指Offer]把数组排成最小的数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 【Java】 剑指offer(45) 把数组排成最小的数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接 ...
- Go语言实现:【剑指offer】把数组排成最小的数
该题目来源于牛客网<剑指offer>专题. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字 ...
- 《剑指offer》把数组排成最小的数
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 《剑指offer》---把数组排成最小的数
本文算法使用python3实现 1 题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组 $ [3,32,321] $ ,则打印出这 ...
- 剑指OFFER之旋转数组的最小数字(九度OJ1386)
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- 剑指offer系列58---把数组排成最小的数
[题目]输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. * 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323.[思路]1 ...
随机推荐
- C#反射机制介绍
反射的定义:审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. ...
- Android开发之 android:windowSoftInputMode属性详解
android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一] ...
- Ubuntu设置中文
Ubuntu设置中文:需要联网下载中文包,不然无法设置中文系统. 进去系统后再右上角有个齿轮图标点击,找到系统设置(System Settings)点击弹出一个界面,找到Language Suppor ...
- python扩展实现方法--python与c混和编程
前言 需要扩展Python语言的理由: 创建Python扩展的步骤 1. 创建应用程序代码 2. 利用样板来包装代码 a. 包含python的头文件 b. 为每个模块的每一个函数增加一个型如PyObj ...
- Ildasm.exe(MSIL 反汇编程序)
MSIL 反汇编程序是 MSIL 汇编程序 (Ilasm.exe) 的伙伴工具. Ildasm.exe 采用包含 Microsoft 中间语言 (MSIL) 代码的可迁移可执行 (PE) 文件,并创建 ...
- SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...
- FZU1686 神龙的难题 dancing links 重复覆盖
分析:每次可以打一个小矩阵的怪,然后把每个怪看成一列,然后每个小矩阵看成一行,枚举左上角就行 注:然后注意总共的节点数是新图的行*列的个数,不是原图 #include<cstdio> #i ...
- umask设置导致程序权限不足的问题
这几天邮件告警总是发不了邮件,查看了下zext_msmtp.sh的日志,发现总是提示权限不足…… 于是切换为zabbix的账户,发现在msmtp的目录下连ls都无法执行. 之后发现是umask的问题, ...
- iOS程序性能优化
iOS程序性能优化 一.初级 使用ARC进行内存管理 在iOS5发布的ARC,它解决了最常见的内存泄露问题.但是值得注意的是,ARC并不能避免所有的内存泄露.使用ARC之后,工程中可能还会有内存泄露, ...
- js基础第八天
返回前面起第一个字符位置 indexOf("sdfsdf");它是从左边索引为0开始数,而且只找第一个,然后返回该字符的位置.返回是个数值.如果找不到该字符,那么就会返回-1. 返 ...