23.04.15每日一题 链接
难度 中等
因为所有花园最多只有三条路可以进入或者离开,并且想邻的植花颜色不同,而每个花园有四种颜色的选择。
所以你以任何一个点为参考系种任意颜色的开始,都能获取正确答案。
如果只有三种的话,就要使用dfs才能得出正确结果。
- 构图获取每朵花的邻居
- 开始遍历每一朵花
- 他所有的颜色选择就是他邻居已经选择的完不要的颜色
class Solution {
public int[] gardenNoAdj(int n, int[][] paths) {
//构图
List<Integer>[] map=new List[n+1];
for(int i=1;i<=n;i++){
map[i]=new ArrayList<Integer>();
}
for(int[] p:paths){
map[p[0]].add(p[1]);
map[p[1]].add(p[0]);
}
//默认颜色为 0,这样可以避免还没有获取颜色的植物不会干扰当前植物
int[] ans=new int[n+1];
for(int i=1;i<=n;i++){
boolean[] flag=new boolean[5];
for(int x :map[i]){
flag[ans[x]]=true;
}
for(int x=1;x<5;x++){
if(!flag[x]){
ans[i]=x;
break;
}
}
}
//
return Arrays.copyOfRange(ans,1,n+1);
}
}