给定一个任意长度的java数组,如何算出数组内的数能组合出来的最大整数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定一个任意长度的java数组,如何算出数组内的数能组合出来的最大整数?相关的知识,希望对你有一定的参考价值。

首先拿出首位最大的那些数字,如果首位相同,长度的小的应该更大,放大前面。

1.第一个类

package com.me.small_test;

public class MyString implements Comparable<MyString>

private String content;

public MyString(String content)

this.content = content;

public MyString(int value)

this.content = String.valueOf(value);

public String getContent()

return content;

public void setContent(String content)

this.content = content;

public int compareTo(MyString o)

if (content.charAt(0) == o.getContent().charAt(0))

if (content.length() > o.getContent().length())

return compareStrings(content, o.getContent());

else if (content.length() < o.getContent().length())

return -compareStrings(o.getContent(), content);

return content.compareTo(o.getContent());

public int compareStrings(String s1, String s2)

String suffix = s1.substring(s2.length());

for (int i = 0; i < suffix.length(); i++)

if (s2.charAt(s2.length() - 1) > suffix.charAt(i))

return -1;

return 1;

2.第二个类

package com.me.small_test;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class Test

public static void main(String[] args)

Test t = new Test();

int[] numbers = new int[] 9, 98, 123, 32 ;

List<MyString> nums = t.convertToMyStringArray(numbers);

StringBuffer sb = new StringBuffer("");

for (int i = nums.size() - 1; i >= 0; i--)

sb.append(nums.get(i).getContent());

System.out.println(sb.toString());

public List<MyString> convertToMyStringArray(int[] a)

List<MyString> list = new ArrayList<MyString>();

for (int value : a)

list.add(new MyString(value));

Collections.sort(list);

return list;

参考技术A 楼上的我就不怎么说了,第一个测试不充分,第二个代码太乱
随便给个例子,就能测试不通过 878, 88, 8789,9
/**
* 这里要返回字符串,因为int型能表示的范围过小
* @param nums
* @return
*/
public static String getMaxSum(int ... nums)

if (nums == null)

return "";

String[] numStrs = new String[nums.length];
int i = 0;
for (int num : nums) numStrs[i++] = num + "";
Arrays.sort(numStrs, new Comparator<String>()

/**
* 比较规则,从首字符开始比较,谁大谁优先
* 如果所有字符一样,长度相等,返回0,如果长度不一样,将长度长一些的多余部分与相同部分首字符比较,谁大谁优先。
* 例如:98 < 99 878 > 87 877 < 87 888 = 88
*
* 简单归纳一下可以看出一个比较简单的算法
* 先将两个字符串无限重复直至双方长度一致,然后比较大小即可
* @param o1
* @param o2
* @return
*/
@Override
public int compare(String o1, String o2)

int length1 = o1.toCharArray().length;
int length2 = o2.toCharArray().length;
//这里直接就取双方的乘积吧,楼主有兴趣可以写个方法来求最小公倍数
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
for (int i = 0; i < length2; i++) sb1.append(o1);
for (int i = 0; i < length1; i++) sb2.append(o2);
return sb2.toString().compareTo(sb1.toString());

);
StringBuilder sb = new StringBuilder();
for (String s : numStrs)

sb.append(s);

return sb.toString();

java 数组内的最大组合数

给定一个任意长度的java数组,求数组内的数能组合出来的最大整数比如说{9,98,123,32} 最大就是 99832123 

import java.util.Arrays;
import java.util.Comparator;

class Test {
    public static void main(String args[]) {

        int[] arr = { 12, 45, 356, 767, 33, 23, 35 };
        System.out.println(getMaxSum(arr));
    }

    public static String getMaxSum(int[] nums) {
        if (nums == null) {
            return "";
        }
        String[] numsStr = new String[nums.length];
        int i = 0;
        for (int num : nums) {
            numsStr[i++] = num + "";
        }
        Arrays.sort(numsStr, new Comparator<String>() {
            public int compare(String str1, String str2) {
                String temp1 = str1 + str2;
                String temp2 = str2 + str1;
                return (-temp1.compareTo(temp2));
            }
        });
        StringBuilder sb = new StringBuilder();
        for (String s : numsStr)
            sb.append(s);
        return sb.toString();
    }
}

 

以上是关于给定一个任意长度的java数组,如何算出数组内的数能组合出来的最大整数?的主要内容,如果未能解决你的问题,请参考以下文章

美丽数列

生成长度在给定范围内的数组的所有可能组合

未排序数组中累加和为给定值的最长子数组长度

未排序数组中累加和小于或等于给定值的最长子数组长度

一个无序数组,任意两个数相加等于一个给定的数,并且用复杂度最小的方法得出

递归之求二维数组的最短路径给定一个整数和一个数组任意选择数组中的数累加能否得到该整数