题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

//一气呵成

选择排序的思想,其实就是比较字符串的大小,将数字小的放在前面,但是比较的是位数,比如说3,23,得到的肯定是233,所以先比较首字符,但是如果一直相同就比较麻烦了,需要将长的那部分与短的首字符比较,这就是helper函数的意义。

 1 import java.util.ArrayList;
2
3 public class Solution {
4 public String PrintMinNumber(int [] numbers) {
5 String res="";
6 if(numbers.length==0)
7 return res;
8 String[] arr=new String[numbers.length];
9 for(int i=0;i<numbers.length;i++)
10 arr[i]=""+numbers[i];
11
12 for(int i=0;i<arr.length;i++)
13 {
14 int min=i;
15 for(int j=i;j<arr.length;j++)
16 if(helper(arr[j],arr[min]))
17 min=j;
18 swap(arr,i,min);
19 }
20 for(int i=0;i<arr.length;i++)
21 res+=arr[i];
22 return res;
23
24 }
25 public void swap(String[] arr,int i,int j)
26 {
27 String temp=arr[i];
28 arr[i]=arr[j];
29 arr[j]=temp;
30 }
31 public boolean helper(String s1,String s2)
32 {
33 int len1=s1.length();
34 int len2=s2.length();
35 if(len1>len2)
36 {
37 for(int i=0;i<len1;i++)
38 {
39 if(i<len2)
40 {
41 if(s1.charAt(i)>s2.charAt(i))
42 return false;
43 else if(s1.charAt(i)<s2.charAt(i))
44 return true;
45 }
46 else
47 {
48 if(s1.charAt(i)<s2.charAt(0))
49 return true;
50 else if(s1.charAt(i)>s2.charAt(0))
51 return false;
52 }
53 }
54 return true;
55 }
56 else
57 {
58 for(int i=0;i<len2;i++)
59 {
60 if(i<len1)
61 {
62 if(s1.charAt(i)>s2.charAt(i))
63 return false;
64 else if(s1.charAt(i)<s2.charAt(i))
65 return true;
66 }
67 else
68 {
69 if(s1.charAt(0)<s2.charAt(i))
70 return true;
71 else if(s1.charAt(0)>s2.charAt(i))
72 return false;
73 }
74 }
75 return true;
76 }
77 }
78
79 }

对数组进行排序成最小的,相当于自己实现了一次String的compareTo函数,不过是另类的。的更多相关文章

  1. C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置

    #include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7, ...

  2. 02-Java 数组和排序算法

    一.Java 数组 1.数组定义:数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识. 2.数组的分类:一维.二维.三维. 3.数组声明及内存分配: 为数组分配内存空间:如果不分 ...

  3. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  4. Java数组 —— 八大排序

    (请观看本人博文--<详解 普通数组 -- Arrays类 与 浅克隆>) 在本人<数据结构与算法>专栏的讲解中,本人讲解了如何去实现数组的八大排序. 但是,在讲解的过程中,我 ...

  5. java基础---数组的排序算法(3)

    一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...

  6. javascript:算法之数组sort排序

    数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序( ...

  7. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  8. JavaScript 使用 sort() 方法从数值上对数组进行排序

    使用 sort() 方法从数值上对数组进行排序. <html> <body> <script type="text/javascript"> f ...

  9. C#数组的排序

    对于数组的排序有好多种方法,上面这种是最常规的方法,当然在Array类中有两个方法就是专门来完成排序的,一会我们再来看这两方法,下面我们还是来看一下语法吧,只要搞懂语法了,就可以自己随便排序了. 冒泡 ...

随机推荐

  1. Vue基础(1)

    Vue简介 1.JavaScript框架 2.简化Dom操作 3.响应式数据驱动 Vue基础 通过下面代码引用vue: <script src="https://cdn.jsdeliv ...

  2. Parquet 列式存储格式

    Parquet 列式存储格式 参考文章: https://blog.csdn.net/kangkangwanwan/article/details/78656940 http://parquet.ap ...

  3. rsync 守护进程模式搭建 与常见报错

    守护进程模式搭建 1.环境准备 2.安装rsync(做备份的服务器都安装) [root@backup ~]# yum install -y rsync 3.服务端配置 [root@backup ~]# ...

  4. 注意由双大括号匿名类引起的serialVersionUID编译告警

    问题描述 最近版本组织清理编译告警,其中有这么一条比较有意思,之前没见过,拿出来说一说 "serializable class anonymous com.demo.Main$1 has n ...

  5. Redis---01简述目录结构与redis.conf文件

    一.Redis目录结构 (当前Redis是在CentOS 7 1708 64位环境下,Redis版本为3.2.5) 进入默认的Redis安装目录/usr/local/bin,可以看见这些下图目录结构 ...

  6. 01 . Go之Gin+Vue开发一个线上外卖应用

    项目介绍 我们将开始使用Gin框架开发一个api项目,我们起名为:云餐厅.如同饿了么,美团外卖等生活服务类应用一样,云餐厅是一个线上的外卖应用,应用的用户可以在线浏览商家,商品并下单. 该项目分为客户 ...

  7. Java的Arrays.sort()方法到底用的什么排序算法

    暂时网上看过很多JDK8中Arrays.sort的底层原理,有些说是插入排序,有些说是归并排序,也有说大于域值用计数排序法,否则就使用插入排序...其实不全对.让我们分析个究竟: 1 // Use Q ...

  8. Git使用push命令卡住?

    为什么Git用ssh连不上GitHub,push就卡住,而用HTTPS可以连接.上一次用Git的ssh连接时候还可以,这段时间再重新使用Git却发现ssh方式push到Git,每次一push就卡住,找 ...

  9. js匀速运动框架案例

    点击"开始运动"按钮,红色的#red区块开始向右匀速运动,抵达到黑色竖线位置自动停止,再次点击"开始运动"#red区块也不会再运动.同时为了便于后期维护,要求运 ...

  10. linux netfilter ----iptable_filter

    内核中将filter模块被组织成了一个独立的模块,每个这样独立的模块中都有个类似的init()初始化函数:首先来看一下filter模块是如何将自己的钩子函数注册到netfilter所管辖的几个hook ...