亮亮深吸一口气,打开了地图,地图上写着(X:12,Y:?),这可让亮亮犯了愁,这个问号代表了什么意思呢? 亮亮绞尽脑汁也想不出什么思路,忽然他在地图背面发现了一串数字,数字下面写着一段话“这只是一个1~n的混乱排列,不用在意第i个值”,亮亮眼前一亮,“这个混乱排列中第i个一定是Y的值!”于是,亮亮开始恢复这个混乱排列。
每组数据第一行一个整数n(0<n≤25),第二行即现在纸上的数字串
一行n个空格隔开的整数,为小明写下的排列。
4 2413
2 4 1 3
import java.util.*; // 回溯:分割字符串 → 数字1~n public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); StringBuilder sb = new StringBuilder(); while (in.hasNext()) { int n = in.nextInt(); char[] s = in.next().toCharArray(); path = new ArrayList<>(); used = new boolean[n + 1]; dfs(s, 0, n); for (int x : path) sb.append(x).append(' '); sb.append('\n'); } System.out.println(sb.toString()); } private static List<Integer> path; private static boolean[] used; private static boolean dfs(char[] s, int i, int n) { // 1~n if (i == s.length) return true; if (s[i] == '0') return false; int j = i, num = 0; while (j < s.length && num * 10 + s[j] - '0' <= n) { num = num * 10 + s[j] - '0'; if (!used[num]) { used[num] = true; path.add(num); if (dfs(s, j + 1, n)) return true; used[num] = false; path.remove(path.size() - 1); } j++; } return false; } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int n=sc.nextInt(); String str=sc.next(); int[] arr=new int[str.length()]; for(int i=0;i<str.length();i++) arr[i]=Integer.parseInt(String.valueOf(str.charAt(i))); List<Integer> li=new ArrayList<Integer>(); splitNumStr(li,arr,n); for(int i:li) System.out.print(i+" "); System.out.println(); } } public static void splitNumStr(List<Integer> li,int[] arr,int n) { for(int i=0;i<arr.length;) { int temp; if(i!=arr.length-1) { temp=arr[i]*10+arr[i+1]; if(!li.contains(temp) && temp<=n) i+=2; else { temp=arr[i]; i++; } } else { temp=arr[i]; i++; } li.add(temp); } while(li.size()<n) { for(int i=0;i<li.size();i++) { if(li.get(i)>10&&li.get(i)!=20) { int r=li.get(i)%10; li.add(i+1, r); break; } } } } }