一、题目
二、代码
class Solution
{
int length = 0;
LinkedList<Integer> re_bit = new LinkedList<>();
public boolean whether(int number)
{
int every_bit =0;
int last_bit = 11;
int n=number;
if(length == 0)
{
while(n!=0)
{
// System.out.println(" 增加 ");
every_bit = n%10;
re_bit.add(every_bit);
n = n/10;
length++;
}
n=number;
}
while(n!=0)
{
every_bit = n%10;
n = n/10;
if( every_bit>last_bit ) return false;
last_bit = every_bit;
}
return true;
}
public int reverse(int num)
{
int i;
int n;
n=num;
int return_num =0;
while(n!=0)
{
return_num = return_num*10+n%10;
n = n/10;
}
return return_num;
}
public int monotoneIncreasingDigits(int n)
{
// System.out.println(whether(121));
int return_num = 0;
return_num = n;
if(whether(return_num)==true) return return_num;
int i,j;
// for(i=0;i<length;i++)
// {
// System.out.println(" "+re_bit.get(i));
// }
for(i=1;i<length;i++)
{
return_num = 0;
for(j=0;j<length;j++)
{
if(j<i) return_num = return_num*10+9;
else if(j==i)
{
while(re_bit.get(j)==0)
{
j++;
return_num = return_num*10+9;
}
// System.out.println(" j "+j+" "+length);
if(j==length-1&&re_bit.get(j)==1) break;
return_num = return_num*10+re_bit.get(j)-1;
}
else
{
return_num = return_num*10+re_bit.get(j);
}
//System.out.println(" return_num "+return_num);
}
//System.out.println(" return_num "+return_num);
//System.out.println(" whether "+whether(return_num));
int real_return =reverse(return_num);
if(whether(real_return)==true)
{
//找到结果返回
return real_return;
}
}
return 0;
}
}
三、运行结果
四、附录
二刷
class Solution
{
//从后向前 不满足则变9
public int monotoneIncreasingDigits(int n)
{
int i,j;
List<Integer> re = new LinkedList<>();
int temp = n;
while(temp!=0)
{
re.add(0,temp%10);
temp = temp/10;
}
int length = re.size();
// System.out.println(" 分割 ");
for(i=0;i<length;i++)
{
System.out.println(" "+re.get(i));
}
for(i=length-2;i>=0;i--)
{
if(re.get(i)>re.get(i+1))
{
//System.out.println(" 发现 "+ " i "+i+" "+re.get(i));
re.set(i,re.get(i)-1);
for(j=i+1;j<length;j++)
{
re.set(j,9);
}
}
}
//System.out.println(" 分割 ");
// for(i=0;i<length;i++)
// {
// System.out.println(" "+re.get(i));
// }
int res = 0;
for(i=0;i<length;i++)
{
res = res*10;
res = res+re.get(i);
}
return res;
}
}