竞赛讨论区 > B题,请问我那里有问题
头像
沉默201712102315954
发布于 2020-07-09 22:18
+ 关注

B题,请问我那里有问题

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) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐