[Swift]LeetCode1185. 一週中的第幾天 | Day of the Week

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:爲敢(WeiGanTechnologies)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-aimsgpxp-gw.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

Given a date, return the corresponding day of the week for that date.git

The input is given as three integers representing the daymonth and year respectively.github

Return the answer as one of the following values {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}.算法

 

Example 1:微信

Input: day = 31, month = 8, year = 2019
Output: "Saturday"

Example 2:ide

Input: day = 18, month = 7, year = 1999
Output: "Sunday"

Example 3:spa

Input: day = 15, month = 8, year = 1993
Output: "Sunday"

 

Constraints:設計

  • The given dates are valid dates between the years 1971 and 2100.

給你一個日期,請你設計一個算法來判斷它是對應一週中的哪一天。code

輸入爲三個整數:daymonth 和 year,分別表示日、月、年。component

您返回的結果必須是這幾個值中的一個 {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}

 

示例 1:

輸入:day = 31, month = 8, year = 2019
輸出:"Saturday"

示例 2:

輸入:day = 18, month = 7, year = 1999
輸出:"Sunday"

示例 3:

輸入:day = 15, month = 8, year = 1993
輸出:"Sunday"

 

提示:

  • 給出的日期必定是在 1971 到 2100 年之間的有效日期。

Runtime: 0 ms
Memory Usage: 20.5 MB
 1 class Solution {
 2     let S:[String] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
 3     func dayOfTheWeek(_ day: Int, _ month: Int, _ year: Int) -> String {
 4         var month = month
 5         var year = year
 6         if month < 3
 7         {
 8             year -= 1
 9             month += 12
10         }
11         let w:Int = (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7
12         return S[w]
13     }
14 }

0ms

 

 1 class Solution {
 2     func dayOfTheWeek(_ day: Int, _ month: Int, _ year: Int) -> String {
 3         let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 4         let days = ["Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"]
 5         var res = 0
 6         for y in stride(from: 1972, to: year, by: 4) {
 7             res += 1
 8         }
 9         if year % 4 == 0 && year != 2100 && month > 2 {
10             res += 1
11         }
12         res += (year - 1971) * 365
13         for m in 1..<month {
14             res += months[m - 1]
15         }
16         res += (day - 1)
17         res %= 7
18         return days[res]
19     }
20 }

4ms

 1 class Solution {
 2     func dayOfTheWeek(_ day: Int, _ month: Int, _ year: Int) -> String {
 3         guard day >= 1 && day <= 31 && month >= 1 && month <= 12 && year >= 1971 && year <= 2100 else {
 4             return ""
 5         }
 6         
 7         func isLeapYear(_ year: Int) -> Bool {
 8             return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
 9         }
10         
11         // 1971-1-1 => Friday
12         let weekName = ["Friday", "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"]
13         // Days to 01-01, leadYear
14         let monthDays = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]
15         var days = 0
16      
17         for y in 1971 ..< year {
18             days += (isLeapYear(y) ? 366 : 365)
19         }
20         
21         if month < 3 {
22             days += monthDays[month - 1] + day - 1
23         }
24         else {
25             days += (monthDays[month - 1] + (isLeapYear(year) ? 0 : -1) + day - 1)
26         }
27         
28         return weekName[days % 7]
29     }
30 }

8ms

 1 class Solution {
 2     func dayOfTheWeek(_ day: Int, _ month: Int, _ year: Int) -> String {
 3         let formatter  = DateFormatter()
 4         formatter.dateFormat = "yyyy-MM-dd"
 5         let date = formatter.date(from: "\(year)-\(month)-\(day)")
 6         let myCalendar = Calendar(identifier: .gregorian)
 7         let weekDay = myCalendar.component(.weekday, from: date!)
 8         
 9         return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][weekDay - 1]
10     }
11 }
相關文章
相關標籤/搜索