View Code of Problem 3917

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int t =in.nextInt();
		for(int i =0;i<t;i++) {
			String n=in.next();
			char[] max = n.toCharArray();
			char[] min = n.toCharArray();
			int k =in.nextInt();
			System.out.println(getmin(min,0,k)+" "+getmax(max,0,k));
		}
	}
	public static String getmin(char[] num,int loc,int k) {
		if(k==1) {
			int minloc = loc;
			for(int i =num.length-1;i>=loc;i--) {
				if(num[minloc]>num[i]) {
					minloc=i;
				}
			}
			if(minloc == loc) {
				if(loc+1==num.length) {
					StringBuffer sb=new StringBuffer();
					return sb.append(num).toString();
				}
				return getmin(num,loc+1,k);
			}
			char temp = num[loc];
			num[loc]=num[minloc];
			num[minloc]=temp;
			StringBuffer sb=new StringBuffer();
			return sb.append(num).toString();
		}else {
			ArrayList<Integer> allminloc = new ArrayList<Integer>();
			int minloc = loc;
			for(int i =num.length-1;i>=loc;i--) {
				if(num[minloc]>num[i]) {
					minloc=i;
				}
			}
			if(minloc == loc) {
				if(loc+1==num.length) {
					StringBuffer sb=new StringBuffer();
					return sb.append(num).toString();
				}
				return getmin(num,loc+1,k);
			}else {
				for(int i =num.length-1;i>=loc;i--) {
					if(num[minloc]==num[i]) {
						allminloc.add(i);
					}
				}
				StringBuffer sb=new StringBuffer();
				String minnum=sb.append(num).toString();
				char[] copy = num.clone();
				for(int i :allminloc) {
					char temp = num[loc];
					num[loc]=num[i];
					num[i]=temp;					
					String newnum=getmin(num,loc+1,k-1);
					if(minnum.compareTo(newnum)>0) {
						minnum=newnum;
					}
					num=copy.clone();
				}
				return minnum;
			}
		}
	}
	public static String getmax(char[] num,int loc,int k) {
		if(k==1) {
			int maxloc = loc;
			for(int i =num.length-1;i>=loc;i--) {
				if(num[maxloc]<num[i]) {
					maxloc=i;
				}
			}
			if(maxloc == loc) {
				if(loc+1==num.length) {
					StringBuffer sb=new StringBuffer();
					return sb.append(num).toString();
				}
				return getmax(num,loc+1,k);
			}
			char temp = num[loc];
			num[loc]=num[maxloc];
			num[maxloc]=temp;
			StringBuffer sb=new StringBuffer();
			return sb.append(num).toString();
		}else {
			ArrayList<Integer> allmaxloc = new ArrayList<Integer>();
			int maxloc = loc;
			for(int i =num.length-1;i>=loc;i--) {
				if(num[maxloc]<num[i]) {
					maxloc=i;
				}
			}
			if(maxloc == loc) {
				if(loc+1==num.length) {
					StringBuffer sb=new StringBuffer();
					return sb.append(num).toString();
				}
				return getmax(num,loc+1,k);
			}else {
				for(int i =num.length-1;i>=loc;i--) {
					if(num[maxloc]==num[i]) {
						allmaxloc.add(i);
					}
				}
				StringBuffer sb=new StringBuffer();
				String maxnum=sb.append(num).toString();
				char[] copy = num.clone();
				for(int i :allmaxloc) {
					char temp = num[loc];
					num[loc]=num[i];
					num[i]=temp;
					
					String newnum=getmax(num,loc+1,k-1);
					if(maxnum.compareTo(newnum)<0) {						
						maxnum=newnum;
					}
					num=copy.clone();
				}
				return maxnum;
			}
		}
	}
}

Double click to view unformatted code.


Back to problem 3917