对给定整数的数字进行排序,不带“0”

cx6n0qe3  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(289)

我试图对给定整数的数字进行排序,方法是将整数转换为字符串,并根据该字符串长度的大小创建一个数组。我使用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;
cclgggtu

cclgggtu1#

解决这个问题似乎有很多过火的地方,就像在很多代码中一样,所以这里是我对它的看法。

static int sortDigits(int num) {
    char[] arr = Integer.toString(num).toCharArray();
    Arrays.sort(arr);
    return Integer.parseInt(new String(arr));
}

测试

System.out.println(sortDigits(4201514)); // 112445

当然,你也可以这样做 longBigInteger 版本:

static long sortDigits(long num) {
    char[] arr = Long.toString(num).toCharArray();
    Arrays.sort(arr);
    return Long.parseLong(new String(arr));
}
static BigInteger sortDigits(BigInteger num) {
    char[] arr = num.toString().toCharArray();
    Arrays.sort(arr);
    return new BigInteger(new String(arr));
}
w6lpcovy

w6lpcovy2#

如果我正确理解您的问题,当给定一个整数时,您希望对每个数字进行“排序”,忽略0。
为此,您可以首先将其转换为字符串:

String value = String.valueOf(num);

因为您有一个字符串,所以可以使用 split() 函数拆分每个“数字”,如下所示:

String[] numbers = value.split("");

然后,您可以找到0的索引(并将其存储在某处)。

ArrayList<Integer> indexes = new ArrayList<>();

for (int i = 0; i < numbers.length; i++) {
    if (numbers[i].equals("0")) {
        indexes.add(i);
    }
}

然后,可以对字符串数组进行排序( numbers )使用 sort() 功能:

Arrays.sort(numbers);

然后,您可以像这样删除0(通过创建新的 ArrayList ):

ArrayList<String> copy = new ArrayList<>();

for (String s : numbers) {
    if (!s.equals("0")) {
        copy.add(s);
    }
}

(在这里,您可以使用 ArrayUtils 如果已导入库。)
然后,将每个元素连接起来,形成一个完整的字符串 join() :

String result = String.join("", copy);

最后,使用 indexes ,将0插入到它们最初所在的位置:

for (int i : indexes) {
    result = result.substring(0, i) + "0" + result.substring(i);
}
``` `result` 这就是你想要的。
注意:这可能不是最充分的方法,因此您可以在任何地方修改它。
qyyhg6bp

qyyhg6bp3#

根据你的代码,我做了一些修改
数组的大小应为10,因为在一个数字中只能有0到9位数字
使用此数组可以创建每个数字出现的频率数组
从1到9迭代数组并生成一个排序的数字

public static long sortInt(long num) {

    int[] arr = new int[10];

    while(num != 0) {
        arr[(int) num % 10] ++;
        num /= 10;
    }

    long result = 0;
    for(int i = 1 ; i < arr.length ; i++)
        while(arr[i]-- != 0)
            result = result * 10 + i;

    return result;
}

相关问题