亮亮深吸一口气,打开了地图,地图上写着(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;
}
}
}
}
}