给定一个字符串,其中包含许多正整数。如何按数字之和排列它们。意味着最小的数字和将出现在左边,最大的数字和将出现在右边。
例如:
下面是我的代码:
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”
发生这种情况的原因是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那里窃取了“混合”这个名称,但这就是我谈论它的方式,并希望至少在印刷品上看到它一次(就像渡渡鸟一样),它从地球表面消失了。
问题内容: 这两个命令有什么区别? 我想存储约500万个整数,并且希望以最有效的方式进行存储。 问题答案: 不,没有区别;两者都存储为字符串。从redis.io: Redis列表只是字符串列表,按插入顺序排序。 根据您的用法,您可能需要考虑使用set而不是列表。