leetcode 858

此題是技巧題,挺有意思的。題目主要是說鏡子反射的問題,這題花費的比較長的時間。建議可以先手動畫一畫找找規律,我們可以很容易推導得到從側面經過上下底面返回到第一個側面的時候,距離最近點的初始距離是q- p %q,這個可以通過斜率不變以及相似三角形的性質推導得到。知道這一點之後,我們需要考慮的只有方向的問題,我們可以設置兩個bool變量,來表示在上下,和在左右,我們可以很容易知道每次碰到上下面的時候,上下方向肯定會改變,對於左右的情況,我們需要看看p/q的值,分成奇數和偶數考慮,一種是方向不變,一種是方向改變。雖然這題最後自己做出來了,但是覺得挺有趣的,mark一下,附代碼:

class Solution:
    def mirrorReflection(self, p, q):
        """
        :type p: int
        :type q: int
        :rtype: int
        """
        res = 0
        if q ==0:
            return 0
        right = False
        up = True
        while not ((p-res)%q == 0):
            count = int((p-res)/q)
            if count % 2 == 0:
                right = not right
            res = q - (p-res)%q
            up = not up
        if ((p-res)/q) % 2 == 1:
            right = not right
        if right and up:
            return 1
        elif not right and up:
            return 2
        else:
            return 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章