这个问题在这里已经有答案了:
什么是StackOverflowerr(15个答案)
上个月关门了。
在执行过程中的问题是给堆栈溢出问题,但这是什么!
运行时错误(nzec)
sun.nio.cs.us\u ascii$encoder.encodeArrayLop(us\u ascii)处的线程主java.lang.StackOverflowerError中出现异常。java:198)在sun.nio.cs.us\u ascii$encoder.encodeloop(us\u ascii。java:231)在java.nio.charset.charsetencoder.encode(charsetencoder。java:579)在sun.nio.cs.streamncoder.implwrite(streamncoder。java:271)在sun.nio.cs.streamncoder.write(streamncoder。java:125)在java.io.outputstreamwriter.write(outputstreamwriter。java:207)在java.io.bufferedwriter.flushbuffer(bufferedwriter。java:129)在java.io.printstream.write(printstream。java:526)在java.io.printstream.print(printstream。java:669)解决,解决。java:22)在解决方案。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:23)解决,解决。java:27)解决,解决。java:23)解决,解决。java:27)解决,解决。java:23)
import java.util.*;
public class Solution {
public static void printIncreasingNumber(int n) {
/* Your class should be named Solution.
* Don't write main() function.
* Don't read input, it is passed as function argument.
* Print output as specified in the question
*/
int k = 10;
int N = (int)Math.pow(10,n);//limit
solve((int)Math.pow(10,n-1),N);
}
static void solve(int j,int n){
if(j==n){
return;
}
if(check(j)){
System.out.print(j+" ");
solve(j+1,n);
}
else{
j = increase(j,n);
solve(j,n);
}
}
static boolean check(int k){
ArrayList<Integer> arr = new ArrayList<>();
int temp = k;
while(temp>0){
arr.add(temp%10);
temp = temp/10;
}
boolean ans = true;
for(int i=0;i<arr.size()-1;i++){
if(arr.get(i)<=arr.get(i+1)){
ans = false;
return ans;
}
}
return ans;
}
static int increase(int j,int n){
int ans = 0;
for(int i = j;i<n;i++){
ArrayList<Integer> arr1 = new ArrayList<>();
int temp = i;
while(temp>0){
arr1.add(temp%10);
temp = temp/10;
}
int count = 0;
for(int i1=0;i1<arr1.size()-1;i1++){
if(arr1.get(i1)<=arr1.get(i1+1)){
count++;
}
}
if(count==0){
ans = i;
break;
}
}
return ans;
}
}
我的主要职能是,
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a;
Scanner s = new Scanner(System.in);
a = s.nextInt();
Solution.printIncreasingNumber(a);
}
}
1条答案
按热度按时间vvppvyoh1#
代码中有几个问题:
而不是
if(j==n){
你应该使用if(j>=n){
它看起来像函数increase
有bug,由于此函数返回相同的数字或0(对于increase
功能,不是吗?)。例如,如果调用printincreasingnumber(2),当j=90时,此函数返回0,并且有不定式循环(从0到90反复调用solve函数),p、 我建议您使用任何java debbuger进行检查,然后您可以一步一步地查看所有数字。