【leetcode】1042. Flower Planting With No Adjacent

题目如下:

You have N gardens, labelled 1 to N.  In each garden, you want to plant one of 4 types of flowers.

paths[i] = [x, y] describes the existence of a bidirectional path from garden x to garden y.

Also, there is no garden that has more than 3 paths coming into or leaving it.

Your task is to choose a flower type for each garden such that, for any two gardens connected by a path, they have different types of flowers.

Return any such a choice as an array answer, where answer[i] is the type of flower planted in the (i+1)-th garden.  The flower types are denoted 123, or 4.  It is guaranteed an answer exists.

 

Example 1:

Input: N = 3, paths = [[1,2],[2,3],[3,1]]
Output: [1,2,3]

Example 2:

Input: N = 4, paths = [[1,2],[3,4]]
Output: [1,2,1,2]

Example 3:

Input: N = 4, paths = [[1,2],[2,3],[3,4],[4,1],[1,3],[2,4]]
Output: [1,2,3,4]

 

Note:

  • 1 <= N <= 10000
  • 0 <= paths.size <= 20000
  • No garden has 4 or more paths coming into or leaving it.
  • It is guaranteed an answer exists.

解题思路:可供选的花的种类只有[1,2,3,4]四种,对于任意一个待种植的花园,只需要判断相邻的花园是否已经种植花卉。如果种植了,把已种植的种类从可供选择的列表中去除,最后在剩余的种类中任选一个即可。

代码如下:

class Solution(object):
    def gardenNoAdj(self, N, paths):
        """
        :type N: int
        :type paths: List[List[int]]
        :rtype: List[int]
        """
        res = [0] * (N+1)
        res[1] = 1
        dic = {}
        for v1,v2 in paths:
            dic[v1] = dic.setdefault(v1,[]) + [v2]
            dic[v2] = dic.setdefault(v2,[]) + [v1]
        for i in range(2,N+1):
            if i not in dic:
                res[i] = 1
            else:
                choice = [1,2,3,4]
                for neibour in dic[i]:
                    if res[neibour] == 0:
                        continue
                    else:
                        if res[neibour] in choice:
                            inx =  choice.index(res[neibour])
                            del choice[inx]
                res[i] = choice[0]
        return res[1:]

 

posted @ 2019-05-22 11:07  seyjs  阅读(672)  评论(0编辑  收藏  举报