我试图对给定整数的数字进行排序,方法是将整数转换为字符串,并根据该字符串长度的大小创建一个数组。我使用modulu选项来分隔数字,最后我用10来反转它。问题是它每次都超出了界限,我不知道如何使数组的大小适合我。代码如下:
String s = String.valueOf(num);
int[] arr = new int[s.length()+1];
while(num != 0) {
arr[(int) num % 10]++;
num = num / 10;
}
long result = 0;
for(int i = 0 ; i < arr.length - 1 ; i++){
for(int j = 0 ; j < arr[i] ; j++) {
result = result * 10;
result = result + i;
}
}
return result;
3条答案
按热度按时间cclgggtu1#
解决这个问题似乎有很多过火的地方,就像在很多代码中一样,所以这里是我对它的看法。
测试
当然,你也可以这样做
long
及BigInteger
版本:w6lpcovy2#
如果我正确理解您的问题,当给定一个整数时,您希望对每个数字进行“排序”,忽略0。
为此,您可以首先将其转换为字符串:
因为您有一个字符串,所以可以使用
split()
函数拆分每个“数字”,如下所示:然后,您可以找到0的索引(并将其存储在某处)。
然后,可以对字符串数组进行排序(
numbers
)使用sort()
功能:然后,您可以像这样删除0(通过创建新的
ArrayList
):(在这里,您可以使用
ArrayUtils
如果已导入库。)然后,将每个元素连接起来,形成一个完整的字符串
join()
:最后,使用
indexes
,将0插入到它们最初所在的位置:qyyhg6bp3#
根据你的代码,我做了一些修改
数组的大小应为10,因为在一个数字中只能有0到9位数字
使用此数组可以创建每个数字出现的频率数组
从1到9迭代数组并生成一个排序的数字