★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:爲敢(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 day
, month
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:設計
1971
and 2100
.給你一個日期,請你設計一個算法來判斷它是對應一週中的哪一天。code
輸入爲三個整數:day
、month
和 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
年之間的有效日期。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 }
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 }