B题,我找第一个通过的代码和我的代码进行 0 < n< 1600 , 0 < m < 1600 范围的结果比较,两个代码所有结果一模一样,但是我WA了??????
请问我哪里有问题
我的代码
public static int solve(int n, int m) { if (n == m) { return 0; } boolean[] visit = new boolean[1700]; Queue<Integer> queue = new LinkedList<>(); visit[n] = true; queue.add(n); int i = 1; int j = 1; while (true) { int x = ((LinkedList<Integer>) queue).pollFirst(); i--; if (x + 1 == m) { return j; } else if ((x + 1) > 0 && (x + 1) <= 1600 && !visit[x + 1]) { visit[x + 1] = true; ((LinkedList<Integer>) queue).addLast(x + 1); } if (x - 1 == m) { return j; } else if ((x - 1) > 0 && (x - 1) <= 1600 && !visit[x - 1]) { visit[x - 1] = true; ((LinkedList<Integer>) queue).addLast(x - 1); } if (x * x == m) { return j; } else if ((x * x) > 0 && (x * x) <= 1600 && !visit[x * x]) { visit[x * x] = true; ((LinkedList<Integer>) queue).addLast(x * x); } if (i == 0) { j++; i = queue.size(); } } }第一个通过的代码
public static int solve(int n, int m) { // write code here int count = 0; HashSet<Integer> a = new HashSet(); LinkedList<Integer> data = new LinkedList<>(); if (n != m) { data.addLast(n + 1); data.addLast(n - 1); data.addLast(n * n); } else { return count; } label: while (true) { count++; LinkedList<Integer> new_data = new LinkedList<>(); while (!data.isEmpty()) { Integer integer = data.removeFirst(); if (a.contains(integer) || integer>2000){ continue ; } a.add(integer); if (integer == m) { break label; } else { new_data.addLast(integer + 1); new_data.addLast(integer - 1); new_data.addLast(integer * integer); } } data = new_data; } return count; }
全部评论
(1) 回帖