During execution the problem is giving stack overflow problem, but what is this!
Runtime Error (NZEC)
Exception in thread main java.lang.StackOverflowError at sun.nio.cs.US_ASCII$Encoder.encodeArrayLoop(US_ASCII.java:198) at sun.nio.cs.US_ASCII$Encoder.encodeLoop(US_ASCII.java:231) at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:579) at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:271) at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125) at java.io.OutputStreamWriter.write(OutputStreamWriter.java:207) at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:129) at java.io.PrintStream.write(PrintStream.java:526) at java.io.PrintStream.print(PrintStream.java:669) at Solution.solve(Solution.java:22) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:27) at Solution.solve(Solution.java:23) at Solution.solve(Solution.java:27) at Solution.solve(Solution.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;
}
}
My main function is,
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);
}
}