[Swift]LeetCode1185. 一周中的第几天 | Day of the Week
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(www.zengqiang.org)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11484998.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given a date, return the corresponding day of the week for that date.
The input is given as three integers representing the day
, month
and year
respectively.
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:
Input: day = 18, month = 7, year = 1999 Output: "Sunday"
Example 3:
Input: day = 15, month = 8, year = 1993 Output: "Sunday"
Constraints:
- The given dates are valid dates between the years
1971
and2100
.
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:day
、month
和 year
,分别表示日、月、年。
您返回的结果必须是这几个值中的一个 {"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 }
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 }