对数组进行排序成最小的,相当于自己实现了一次String的compareTo函数,不过是另类的。
题目描述
//一气呵成
选择排序的思想,其实就是比较字符串的大小,将数字小的放在前面,但是比较的是位数,比如说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函数,不过是另类的。的更多相关文章
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7, ...
- 02-Java 数组和排序算法
一.Java 数组 1.数组定义:数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来做唯一标识. 2.数组的分类:一维.二维.三维. 3.数组声明及内存分配: 为数组分配内存空间:如果不分 ...
- Java数组的排序算法
在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...
- Java数组 —— 八大排序
(请观看本人博文--<详解 普通数组 -- Arrays类 与 浅克隆>) 在本人<数据结构与算法>专栏的讲解中,本人讲解了如何去实现数组的八大排序. 但是,在讲解的过程中,我 ...
- java基础---数组的排序算法(3)
一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...
- javascript:算法之数组sort排序
数组sort排序 sort比较次数,sort用法,sort常用 描述 方法sort()将在原数组上对数组元素进行排序,即排序时不创建新的数组副本.如果调用方法sort()时没有使用参数,将按字母顺序( ...
- javascript数组对象排序
javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...
- JavaScript 使用 sort() 方法从数值上对数组进行排序
使用 sort() 方法从数值上对数组进行排序. <html> <body> <script type="text/javascript"> f ...
- C#数组的排序
对于数组的排序有好多种方法,上面这种是最常规的方法,当然在Array类中有两个方法就是专门来完成排序的,一会我们再来看这两方法,下面我们还是来看一下语法吧,只要搞懂语法了,就可以自己随便排序了. 冒泡 ...
随机推荐
- 那些鼓吹国内首个.NET 5框架的,该醒醒了!
前两天看过园子里有篇[国内首个 .NET 5 框架 XX 斩获 XXX stars,XXX 发布],一顿羡慕嫉妒恨啊.我这.net core 3.1才上手没几天,还没用热乎呢,你这.NET 5的框架都 ...
- LeakCanary检测(二)
在主方法主实现一个内存泄漏,检测到手机会发送通知,也可以用利用androidStudio自带的Profile检测内存泄漏 public class MainActivity extends AppCo ...
- vue 路由知识点(一级路由与二级路由嵌套)
本人小白一个,如果问题,麻烦大神指点, 一级路由: path:'/' 默认为显示; 二级路由: path: '',默认显示为index组件,因为二级路有没有写index组件,所以使用redirect: ...
- 【源码】spring循环引用
spring在单例,非构造方法注入的情况下允许循环依赖 1.循环依赖 a引用b,b引用a.a创建的时候需要b,但是b没有创建,需要先去创建b,b创建的时候又没有a,这就出现的循环依赖的问题 2.为什么 ...
- vue-cli中使用swiper
1.当前项目配置 cnpm install swiper vue-awesome-swiper --save 或指定版本下载 cnpm install swiper@5.4.5 vue-awesome ...
- JavaScript监听滚动条的进度条
<style type="text/css"> *{ margin: 0; padding: 0; } .g-box{ width: 100%; height: 400 ...
- NB-IOT的应用场景有哪些
虽然抄表.停车.井盖监测等应用是最为常见的示范,但若低功耗广域网络仅限于这几个领域,则整个产业的规模就显得太小了.实际上,经过近两年的探索,目前示范应用的数量已有数十个,分布在各行各业,带来了大量的机 ...
- struct.pack()和struct.unpack() 详解(转载)
原文链接:https://blog.csdn.net/weiwangchao_/article/details/80395941 python 中的struct主要是用来处理C结构数据的,读入时先转换 ...
- Spring Cloud Alibaba 之 版本选择
alibaba 版本问题 一下是Spring cloud ,Spring Cloud Alibaba, Spring Boot 之间的版本选择 在版本选择上大家尽量选择稳定版,也就是Release 后 ...
- CF1137A/1138C Skyscrapers
排序+数据结构 将每一行(每一列)都排个序,并将原位置的在这一行(列)中的排行记录在一个数组里 注意,要将楼高度相同的元素看作一个元素 如 1 1 4 5 6 8 8,则排行是 1 1 2 ...