当前位置: 首页 > 知识库问答 >
问题:

字符串中的整数按其位数之和排列

公良征
2023-03-14

给定一个字符串,其中包含许多正整数。如何按数字之和排列它们。意味着最小的数字和将出现在左边,最大的数字和将出现在右边。

例如:

下面是我的代码

import java.util.Map;
import java.util.TreeMap;

//String s = "2000 10003 1234000 44444444 9999 11 11 22 123";
//return "11 11 2000 10003 22 123 1234000 44444444 9999",
public class WeightSort {   
    public static String orderWeight(String string) {
        Map<Integer, String> chunks = new TreeMap<> ();
        for ( String chunk : string.split ( " " ) ) {
            int sum = 0;
            for ( int i = 0; i < chunk.length (); i++ ) {
                sum += Integer.parseInt ( "" + chunk.charAt ( i ) );
            }
            chunks.put ( sum, chunk );
        }
        String s = chunks.values().toString();
        String result = s.substring(1).replaceAll(", ", " ").replaceAll("]", "");
        return result;
    }
    public static void main(String[] args){
        String s = "2000 10003 1234000 44444444 9999 11 11 22 123";
        System.out.println(WeightSort.orderWeight(s));
    }
}

但它只返回:“11 22 123 123 4000 44444444 9999”

共有1个答案

龚钧
2023-03-14

发生这种情况的原因是Treemap 不允许重复。这就是为什么2000被替换为11的原因,11具有相同的数字总和,但在列表中的位置比2000晚。

你的主要部分是正确的--计算数字和的代码有效。现在,您需要将该代码放入自定义字符串比较器中,并将该比较器传递给arrays.sort方法以完成任务:

String[] parts = string.split (" ");
Arrays.sort(parts, new Comparator<String>() {
    public int compare(String lhs, String rhs) {
        int res = Integer.compare(sumDigits(lhs), sumDigits(rhs));
        return res != 0 ? res : lhs.compareTo(rsh);
    }
    private int sumDigits(String chunk) {
        int res = 0;
        for ( int i = 0; i < chunk.length (); i++ ) {
            res += Integer.parseInt ( "" + chunk.charAt ( i ) );
        }
        return res;
    }
});
 类似资料:
  • 问题内容: 我有一个带有文件名的字符串列表: 输出: 但是我想要: 有没有简单的方法可以做到这一点? 问题答案: 是: 说明:字符串按词法排序,因此在字符串之前(因为< ,因此忽略第一个字符串之后的内容)。因此,我们使用的参数是一个回调函数,该函数接受一个列表项并返回用于对该项目进行排序的值- 在您的情况下,是从文件名的第一部分构建的整数。这样,列表就可以正确地按数值排序。

  • 问题内容: 我粘贴代码以查找按位运算符的两个数字的总和。请提出是否可以优化的建议。谢谢… 问题答案: 全面思考: 递归结束,因为进位在右边连续有更多位0(最多32次迭代)。 可以轻松地将其编写为循环。 算法探索的另一个特征在区分情况下并不过分。以上您还可以考虑以下条件:。

  • 我有一个数组: 如何根据数组中每个元素中包含的数字对数组进行排序?

  • 我在寻找字典上最小的字符串的排列数。 例如,< code>bbaa现在,字典上最小的字符串是< code>aabb,因此,排列是, < code>(1,2,3,4),(2,1,3,4),(1,2,4,3),(2,1,4,3)也就是4。 我对它的想法(在python中)是找到最小的字符串(基本上将其排序为字符串),然后创建一个计数器来存储每个字符的计数。 因为,我们不需要一个在字典上变得更大的字符串

  • 问题内容: 当尝试取一个整数并将其前缀为“ b”并将其转换为字符串时,出现此错误: 与此功能有关: 问题答案: name = ‘b’ + str(num) 要么 如S.Lott所述,Python 3及更高版本不建议使用混合运算符’%’。我从INTERCAL那里窃取了“混合”这个名称,但这就是我谈论它的方式,并希望至少在印刷品上看到它一次(就像渡渡鸟一样),它从地球表面消失了。

  • 我的一个Java类分配要求我对多维字符串数组进行排序。它还需要输入您是想按名字排序还是按姓氏排序。我不太理解这个问题的措辞,也就是主要的排序和粗体部分,所以我会把它贴在这里。 编写一个程序,使用以下标题对二维数组进行排序: 该方法应先对行执行主排序,然后对列执行主排序。 使用以下数据测试您的程序: 您的程序应该询问您是希望数组按名字排序还是按最后一个sName排序。 数组中的行将包含名字。sort