static public int reachNumber(int target) {
        Queue<Wrap> q = new LinkedList<>();
        Map<Wrap, Integer> d = new HashMap<>();
        Wrap wrap = new Wrap(0);
        d.put(wrap, 0);
        q.add(wrap);
        while (!q.isEmpty()) {
            Wrap cur = q.remove();
            Wrap right = new Wrap(cur.value + (d.get(cur) + 1));
            Wrap left = new Wrap(cur.value - (d.get(cur) + 1));
            if (right.value == target || left.value == target) {
                return d.get(cur) + 1;
            }

            q.add(left);
            q.add(right);
            d.put(left, d.get(cur) + 1);
            d.put(right, d.get(cur) + 1);
        }
        return d.get(target);
    }
Why Did you create this class? what does it do?
src/problems/medium/ReachANumber.java