[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
1971and2100.
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数: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 }

浙公网安备 33010602011771号