题目描述:
力扣
思路:
从题目描述中可知,花的种类一共有四种,且一定有满足题意的答案。
可以首先将所有花园中的花设置为0,然后遍历与其相邻的花园,选择没有使用过的花的种类(1 2 3 4),将该花园设置成对应的花朵即可。
java语言:
class Solution {
public int[] gardenNoAdj(int n, int[][] paths) {
//使用hashmap存储相邻花园。
HashMap<Integer, ArrayList<Integer>> map = new HashMap<>();
for(int i = 0; i < paths.length; i++) {
ArrayList<Integer> list1 = map.getOrDefault(paths[i][0], new ArrayList<Integer>());
list1.add(paths[i][1]);
map.put(paths[i][0], list1);
ArrayList<Integer> list2 = map.getOrDefault(paths[i][1], new ArrayList<Integer>());
list2.add(paths[i][0]);
map.put(paths[i][1], list2);
}
int[] res = new int[n];
res[0] = 1;
for(int i = 1; i < n; i++) {
int[] flag = new int[5];
ArrayList<Integer> list = map.getOrDefault(i+1, new ArrayList<Integer>());
//遍历相邻花园,将已经设置过的花的种类进行标记。
for(int j = 0; j < list.size(); j++) {
flag[res[list.get(j)-1]] = 1;
}
//选择没有用过的花对该花园进行标记。
for(int j = 1; j <= 4; j++) {
if(flag[j] == 0) {
res[i] = j;
break;
}
}
}
return res;
}
}
js语言:
/**
* @param {number} n
* @param {number[][]} paths
* @return {number[]}
*/
var gardenNoAdj = function(n, paths) {
let map = new Map();
for(let i = 0; i < paths.length; i++) {
let list1 = [];
if(map.has(paths[i][0])) {
list1 = map.get(paths[i][0]);
}
list1.push(paths[i][1]);
map.set(paths[i][0], list1);
let list2 = [];
if(map.has(paths[i][1])) {
list2 = map.get(paths[i][1]);
}
list2.push(paths[i][0]);
map.set(paths[i][1],list2);
}
let res = new Array(n);
res.fill(0);
res[0] = 1;
for(let i = 1; i < n; i++) {
let flag = new Array(5);
let list = []
if(map.has(i+1)) {
list = map.get(i+1);
}
for(let j = 0; j < list.length; j++) {
flag[res[list[j]-1]] = 1;
}
for(let j = 1; j <= 4; j++) {
if(flag[j] !== 1) {
res[i] = j;
break;
}
}
}
return res;
};