LeetCode之Day of the Week(Kotlin)

338 阅读1分钟

问题:


方法: 最简单的解法是蔡勒公式,具体推导过程可以搜索。下面是暴力解法,通过选取1970年12月31日作为原点,然后计算间隔的日数,对7进行除余可得具体的星期数。

class DayOfTheWeek {
    fun dayOfTheWeek(day: Int, month: Int, year: Int): String {
        var cal = 0
        val months = arrayOf(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
        for (index in 1971 until year) {
            if ((index % 4 == 0 && index % 100 != 0) || index % 400 == 0) {
                cal += 366
            } else {
                cal += 365
            }
        }
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
            months[1] = 29
        }
        for (index in 0 until month - 1) {
            cal += months[index]
        }
        cal += day
        when ((cal - 1) % 7) {
            0 -> return "Friday"
            1 -> return "Saturday"
            2 -> return "Sunday"
            3 -> return "Monday"
            4 -> return "Tuesday"
            5 -> return "Wednesday"
            6 -> return "Thursday"
            else -> return ""
        }
    }
}

fun main(args: Array<String>) {
    val dayOfTheWeek = DayOfTheWeek()
    print(dayOfTheWeek.dayOfTheWeek(31, 8, 2019))
}

有问题随时沟通

具体代码实现可以参考Github