# LeetCode 第 159 场周赛

## 一、 缀点成线(LeetCode-5230)

#### 1.3 解题代码


public boolean checkStraightLine(int[][] coordinates) {
int k = Integer.MIN_VALUE;
int x1 = coordinates[0][0];
int y1 = coordinates[0][1];
int x2 = coordinates[1][0];
int y2 = coordinates[1][1];
int dy = y2 - y1;
int dx = x2 - x1;
if (dx != 0) {
k = dy / dx;
}
int b = y1 - k * x1;
boolean onLine = true;
for (int i = 2; i < coordinates.length; i++) {
if (k == Integer.MIN_VALUE) {
if (coordinates[i][0] != x1) {
onLine = false;
break;
}
} else if (coordinates[i][1] != (k * (coordinates[i][0]) + b)) {
onLine = false;
break;
}
}
return onLine;
}



## 二、 删除子文件夹(LeetCode-5231)

#### 2.3 解题代码


class Solution {

public Tree rootNode = null;

public List<String> removeSubfolders(String[] folder) {

rootNode = new Tree();
rootNode.path = "/";
rootNode.nextMap = new HashMap<>();

List<String> res = new ArrayList<>();
Arrays.sort(folder, (a, b) -> {
return a.length() - b.length();
});
for (int i = 0; i < folder.length; i++) {
if (!isCover(folder[i])) {
}
}
return res;
}

public boolean isCover(String path) {

boolean cover = false;
String[] pathArray = path.split("/");
int arrayLen = pathArray.length;

Tree tmp = rootNode;
for (int i = 1; i < arrayLen; i++) {
Tree node = tmp.nextMap.get(pathArray[i]);
if (node == null) {
node = new Tree();
node.path = pathArray[i];
node.nextMap = new HashMap<>();
} else {
if (node.isRoot) {
cover = true;
}
}
if (cover == false && i == arrayLen - 1) {
node.isRoot = true;
}
tmp.nextMap.put(pathArray[i], node);
tmp = node;
}
return cover;
}

}

class Tree {
public String path;
//判断是否是根文件夹
//例如 /a/b 可能是根文件夹，需要在b节点，记录isRoot = true;
public boolean isRoot;
public Map<String, Tree> nextMap;
}


posted @ 2019-10-21 11:24  清泉白石  阅读(84)  评论(0编辑  收藏