leetcode 179. Largest Number 求最大组合数 ---------- java
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
给一组数,求这一组数的最大组合。
刚开始想用直接排序的方法:1、最高位较大的放在前面
2、但是就出现了54与5这种情况,那么进一步判断。
3、然后又出现了121与12的情况,就越写越复杂。也没有写对。
public class Solution {
public String largestNumber(int[] nums) {
System.out.println(compare(121,12));
StringBuffer str = new StringBuffer();
sort(nums, 0, nums.length - 1);
for (int i = nums.length - 1;i >= 0; i--){
System.out.print(nums[i]+" ");
str.append(nums[i]);
}
return str.toString();
}
private void sort(int[] nums, int left, int right){
if (left >= right){
return ;
}
int start = left;
int end = right;
int flag = nums[left];
while (left < right){
while (right > left && compare(flag, nums[right]) == -1){
right--;
}
if (left == right){
break;
} else {
nums[left] = nums[right];
nums[right] = flag;
left++;
}
while (right > left && compare(nums[left],flag) == -1){
left++;
}
if (left == right){
break;
} else {
nums[right] = nums[left];
nums[left] = flag;
right--;
}
}
for( int i = 0;i < nums.length; i++)
System.out.print(nums[i]+" ");
System.out.println();
sort(nums, start, left - 1);
sort(nums, right + 1, end);
}
private int compare(int num1, int num2){
double num1_copy = num1;
double num2_copy = num2;
while (num1_copy >= 10){
num1_copy = num1_copy / 10;
}
while (num2_copy >= 10){
num2_copy = num2_copy / 10;
}
if ((int) num1_copy % 10 > (int) num2_copy % 10){
return 1;
} else if ((int) num1_copy % 10 < (int) num2_copy % 10){
return -1;
} else {
int flag = (int) num1_copy % 10;
while ((int) num1_copy % 10 == (int) num2_copy % 10 && (int) num1_copy != 0 && (int) num2_copy != 0){
flag = (int) num1_copy % 10;
num1_copy = num1_copy * 10 - ((int) num1_copy % 10) * 10;
num2_copy = num2_copy * 10 - ((int) num2_copy % 10) * 10;
}
System.out.println(num1+" "+num2+" "+num1_copy+" "+num2_copy);
if ((int) num1_copy == 0 ){
if (num2_copy % 10 > flag){
return -1;
}else {
return 1;
}
} else if (num2_copy == (double) 0){
if (num1_copy % 10 > flag){
return 1;
} else {
return -1;
}
}else if (num1_copy % 10 > num2_copy % 10){
return 1;
} else {
return -1;
}
}
}
}
2、用另一种方法排序:
直接用String存储数字,两个数字(str1,str2)的大小:
s1 = str1 + str2;
s2 = str2 + str2;
s1.compareTo(s2);
这样比较。
public class Solution {
public String largestNumber(int[] nums) {
String[] strs = new String[nums.length];
for (int i = 0; i < nums.length; i++){
strs[i] = String.valueOf(nums[i]);
}
Comparator<String> comp = new Comparator<String>(){
public int compare(String str1, String str2){
String s1 = str1 + str2;
String s2 = str2 + str1;
return s2.compareTo(s1);
}
};
Arrays.sort(strs, comp);
if (strs[0].charAt(0) == '0'){
return "0";
}
StringBuffer sb = new StringBuffer();
for (String str : strs){
sb.append(str);
}
return sb.toString();
}
}
leetcode 179. Largest Number 求最大组合数 ---------- java的更多相关文章
- leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数
这两个题几乎是一样的,只是leetcode的题是排成最大的数,剑指的题是排成最小的 179. Largest Number a.需要将数组的数转换成字符串,然后再根据大小排序,这里使用to_strin ...
- [LeetCode] 179. Largest Number 最大组合数
Given a list of non negative integers, arrange them such that they form the largest number. Example ...
- Java for LeetCode 179 Largest Number
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Java 特定规则排序-LeetCode 179 Largest Number
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- JavaScript中sort方法的一个坑(leetcode 179. Largest Number)
在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...
- [LeetCode] 179. Largest Number 解题思路
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- [leetcode]179. Largest Number最大数
Given a list of non negative integers, arrange them such that they form the largest number. Input: [ ...
- LeetCode 179 Largest Number 把数组排成最大的数
Given a list of non negative integers, arrange them such that they form the largest number.For examp ...
- Leetcode 179 Largest Number 贪心
此题主要是讲给你一组数,如何将数连在一起能得到最大值(最小值反之),注意局部最优,就是说如果 123 234两个连在一起怎么样最大,显然是234123比123234大,对于3个数我们可以找到类似的性质 ...
随机推荐
- linux命令每日一练习 显示一个文件的制定行---查看命令帮助信息
sed -n '11,12p' ××× cat ***|tail -n +12|head -n 2 tail -n +5 显示末尾五行 查看一个命令的帮助 详细的 man *** 简略的 *** -- ...
- WPF学习笔记1---初接触
刚刚接触WPF,微软的一套东西.WPF最大的特点就是UI设计与代码逻辑的完全剥离.这样美工和程序员的分工就变得非常清楚.因为界面和程序的耦合度很低,也增加的代码的灵活性和可重用性. 微软为WPF的UI ...
- AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar
进度条控件有两种指令,第一种是uib-progressbar指令,表示单一颜色和进度的一个进度条.第二种是uib-bar和uib-progress指令,表示多种颜色和多个进度组合而成的一个进度条. 这 ...
- hibernate整合spring开发的时候遇到的一些小问题
1 在spring整合hibernate开发的时候,在数据源里面配置show_sql为true,但是在实际查询的时候并没有打印sql语句,正确的解决方案为: 把<prop key="s ...
- ubuntu下code::blocks+opengl的使用与配置
操作系统:Ubuntu 15.04 gcc version 4.9.2 opengl安装 sudo apt-get install build-essential libgl1-mesa-dev li ...
- GreenDao数据库框架的配置与增删改查
并非原创,原创地址http://blog.csdn.net/njweiyukun/article/details/51893092 配置-------------------------------- ...
- Spark源码学习1.7——Master.scala
master第一步是加载系统定义的环境变量,如worker的超时时间.系统保留的Application数目等:第二步,加载worker的信 息,地址.id等:第三步,加载Application的信息, ...
- 排序系列 之 折半插入排序算法 —— Java实现
基本思想: 折半插入算法是对直接插入排序算法的改进,排序原理同直接插入算法: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素:排序过程即每次从无序表中 ...
- Ubuntu下libpcap安装
1.首先按下面的博客教程下载和安装四个软件包: 点击打开链接 2.这四个软件都安装好之后按下面教程新建Makefile文件和test.c文件: 点击打开链接 Makefie: all: test.c ...
- jQuery判断checkbox是否选中的3种方法
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...