活跃农民
- 积分
- 883
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2011-4-12
- 最后登录
- 1970-1-1
|
分享一个答案
public boolean isSnapPoint(Point p, int k) {
int x = Math.abs(p.x);
int y = Math.abs(p.y);
int val = 0;
while (x > 0) {
val += x % 10;
x /= 10;
}
while (y > 0) {
val += y % 10;
y /= 10;
}
return val <= k;
}
public HashSet<Point> ReachableKSnapPoint(int k) {
HashSet<Point> points = new HashSet<Point>();
if (k < 0) return points;
helper(new Point(0, 0), k, points);
return points;
}
public void helper(Point point, int k, HashSet<Point> points) {
if(!isSnapPoint(point, k)) return;
points.add(point);
Point left = new Point(point.x - 1, point.y);
if (!points.contains(left)) helper(left, k, points);
Point right = new Point(point.x + 1, point.y);
if (!points.contains(right)) helper(right, k, points);
Point upper = new Point(point.x, point.y + 1);
if (!points.contains(upper)) helper(upper, k, points);
Point lower = new Point(point.x, point.y - 1);
if (!points.contains(lower)) helper(lower, k, points);
}
public class Point {
public int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public boolean equals(Object point) {
if (!(point instanceof Point)) {
return false;
}
Point p = (Point) point;
return this.x == p.x && this.y == p.y;
}
public int hashCode() {
return (x + " " + y).hashCode();
}
} |
|