对数组进行排序成最小的,相当于自己实现了一次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类中有两个方法就是专门来完成排序的,一会我们再来看这两方法,下面我们还是来看一下语法吧,只要搞懂语法了,就可以自己随便排序了. 冒泡 ...
随机推荐
- pyqt5屏幕坐标系
我们直接用代码去理解屏幕坐标系 import sys from PyQt5.QtWidgets import QHBoxLayout,QMainWindow,QApplication,QPushBut ...
- BlockCanary界面卡顿检测
添加依赖: implementation 'com.github.markzhai:blockcanary-android:1.5.0' 运行后会同时安装检测工具,主要检测UI线程运行卡顿现象 pub ...
- 判断app访问还是web访问网站
function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", " ...
- JDK---00Linux上编译openjdk8
Centos 7 编译自定义jdk8 1. 安装所需的依赖 yum install alsa-lib-devel cups-devel libX* gcc gcc-c++ freetype-devel ...
- 【总结】docker
1 docker概述 1.1 docker简介 Docker目标是实现轻量级的操作系统虚拟化解决方案.比虚拟机更轻量级. 虚拟机可以理解成一栋楼里的一个个房间(共享花园基地等),而docker可以理解 ...
- 关于LoRa安全联盟的六大常见问题
LoRaWAN的安全机制在哪里指定? 所有安全机制都在LULA联盟规范中指定,可以由公众下载. LoRa联盟规范如何保证LoRaWAN网络的安全操作? LoRaWAN支持来源认证.完整的媒体访问控制( ...
- 重载符operator() -- effective c++ 3rd P71的的隐式类型转换及相关的研究
class的"operator 返回类型 ()" 的重载 就是对(class)的重载,这个重载符不用参数,参数就是自身,并且与函数传递的参数括号等价 如 func(c), 并且多个 ...
- 848.Shifting Letters——weekly contest 87
848. Shifting Letters 题目链接:https://leetcode.com/problems/shifting-letters/description/ 思路:O(N^2)复杂度过 ...
- .netcore中的依赖注入
IOC.DI相关概念的理解 1.依赖:简单的讲就是"引用到".例如AccountController.cs引用到IAccountService.cs,那么AccountContro ...
- python的各版本的不同
Python的版本主要分为 2.× . 3.× 两个系列. Python3计划每年发布一个新的子版本,一次只增加一两种新语法. 使用时当然选择越新的Python版本越好,版本越老的代码越难维护. 维护 ...