如何重新排列整数,使其在Java中重新排列为其可能的最高值?
例如,如果有人插入34603,则输出为64330。我已经开始解决这个问题了,但我想不出一个有效的解决方案。另外,由于这是一项作业,我的导师告诉我数组是不允许的。以下是我迄今为止所做的:如何重新排列整数,使其在Java中重新排列为其可能的最高值?,java,algorithm,loops,methods,Java,Algorithm,Loops,Methods,例如,如果有人插入34603,则输出为64330。我已经开始解决这个问题了,但我想不出一个有效的解决方案。另外,由于这是一项作业,我的导师告诉我数组是不允许的。以下是我迄今为止所做的: 公共类循环{ 循环(){} 公共区域(INTA){ 字符串as=Integer.toString(a); int指数=0; int asl=as.length(); 而(index很明显,通过按降序排列数字可以获得最大可能的结果。实现这一点的一种更简单、更有效的方法是使用计数排序,但通常的形式是使用数组或数组等价
公共类循环{
循环(){}
公共区域(INTA){
字符串as=Integer.toString(a);
int指数=0;
int asl=as.length();
而(index很明显,通过按降序排列数字可以获得最大可能的结果。实现这一点的一种更简单、更有效的方法是使用计数排序,但通常的形式是使用数组或数组等价物来累加计数
因此,标准的计数排序和所有旨在重新排列项目序列的标准排序例程都是可行的。但你仍然可以从计数排序中获得灵感。例如,计算出输入中有多少9位数字,然后从这些9位数字中形成一个数字。然后计算出有多少8位并附加它们。然后计算出有多少7位,等等。一个数字的“追加”数字可以用算术方式完成,所以整个过程可以不用数组或数组等效,即使我们考虑字符串是数组等价物(我们应该)。
详细内容将按照预期的练习进行。我不会直接为您回答问题,但会提出一些帮助您的想法
您需要对整数进行适当的排序-即无数组/无列表..只需将整数作为一个字符串进行迭代,并逐步交换值,从而得到一个已排序的数值
考虑各种排序算法,快速排序、合并排序、冒泡排序等。您可以有效地选择其中一种算法并尝试实现它
从整数排序和迭代开发代码的基本示例开始,以连续生成正确答案…随着测试用例的尝试:
根本没有数字…null
然后输入空字符串“”
然后是一个数字,所以是一个数字0-9
接下来的两位数字都按顺序排列,然后按顺序排列
然后是顺序中的3位数字
一旦实现了3位数,您就应该能够生成任意位数的解决方案
注意:如果您使用Integer
作为输入数据类型,您将只能获取Integer.MAX_value
的最大整数值(该数值没有那么大)。请尝试将输入参数视为字符串
,并将各个数字视为整数进行比较(您已经在这样做了),这样您就可以处理更大的输入。导入java.util.ArrayList;
导入java.util.Collections;
公共类循环{
循环(){}
public void最大值(int a){
字符串as=Integer.toString(a);
int指数=0;
int index2=1;
int asl=as.length();
ArrayList lista=新的ArrayList();
虽然(index好的,我想到了这个。我知道这不是最漂亮的解决方案,但它确实有效。看看:
公共类循环{
公共INTA、b、c、d、e、f、g、h、i、j;
公共循环(){}
公共区域(INTA){
字符串as=Integer.toString(a);
int指数=0;
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
g=0;
h=0;
i=0;
j=0;
int asl=as.length();
而(index如果不允许数组,那么我认为也不应该允许字符串:
static void biggest(int n)
{
long counts=0;
for(; n>0; n/=10)
{
counts += 1L<<((n%10)*4);
}
long result=0;
for (long digit=9; digit>=0; --digit)
{
for(long rep=(counts>>(digit*4))&15; rep>0; --rep)
{
result = result*10 + digit;
}
}
System.out.println(result);
}
静态无效最大值(int n)
{
长计数=0;
对于(;n>0;n/=10)
{
计数+=1L>(数字*4))&15;代表>0;--代表)
{
结果=结果*10+位;
}
}
系统输出打印项次(结果);
}
Array not allowed(数组不允许)意味着您可能可以使用列表?(可能不允许)哦,不允许使用列表或字典。这是否回答了您的问题?昨天问了几乎相同的问题
static void biggest(int n)
{
long counts=0;
for(; n>0; n/=10)
{
counts += 1L<<((n%10)*4);
}
long result=0;
for (long digit=9; digit>=0; --digit)
{
for(long rep=(counts>>(digit*4))&15; rep>0; --rep)
{
result = result*10 + digit;
}
}
System.out.println(result);
}