天天看點

LeetCode.1185-一周中的星期幾(Day of the Week)

這是小川的第415次更新,第448篇原創

今天介紹的是LeetCode算法題中Easy級别的第266題(順位題号是1185)。給定日期,傳回該日期的星期幾。輸入為三個整數,分别代表日,月和年。

以下列值之一傳回答案:<code>{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}</code>。

例如:

輸入:day = 31, month = 8, year = 2019

輸出:"Saturday"

輸入:day = 18, month = 7, year = 1999

輸出:"Sunday"

輸入:day = 15, month = 8, year = 1993

限制:

給定的日期是1971年至2100年之間的有效日期。

題目要求我們計算給定日期是星期幾,直接調用Calendar類的API,如果是面試不建議這麼做。

第一步,先算出從1971年距離目前年份的前一年總共有多少天,平年加365天,閏年加366天。

第二步,再計算給的月份的前幾個月的天數之和,閏年2月有29天。

第三步,再加上給的天數減去1天,因為題目給的示例中星期天是第一天。

第四步,将最後得到的天數再加上5天,因為1971年1月1日是星期五,然後對7取餘。

利用蔡勒公式來解。

c:代表世紀,是年份的前兩位,比如1971,c就為19。

y:是年份的後兩位,比如1971,y就是71。

m:代表月,3&lt;= m &lt;= 14,某年的1、2月要看作上一年的13、14月來計算,比如2003年1月1日,要看作2002年的13月1日來計算。

d:代表日。

w:計算結果,代表星期幾。

有一點需要注意,利用蔡勒公式算出來的數,有可能為負數,是以需要加上7,再取餘一次,才能當作索引去字元串數組裡取值。

利用基姆拉爾森公式來計算。

如果月份小于3月,則月份加12,年份減1。對于星期幾,在基姆拉爾森公式裡,星期一是排在第一位,星期天排在最後一位。

算法專題目前已更新LeetCode算法題文章272+篇,公衆号對話框回複【資料結構與算法】、【算法】、【資料結構】中的任一關鍵詞,擷取系列文章合集。

以上就是全部内容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、在看就是對我最大的回報和支援!

上一篇: samba
下一篇: CSS定位機制