给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。

    输入为三个整数: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. //因为是从1971年1月1日起算的,1是Friday
    3. static String[] weeks = new String[]{"Thursday","Friday","Saturday","Sunday","Monday","Tuesday","Wednesday"};
    4. static Map<Integer,Integer> map = new HashMap<>();
    5. //预处理一下map
    6. static {
    7. int sum = 0;
    8. map.put(1970,0);
    9. for (int i = 1971; i <= 2100; ++i) {
    10. sum += 365;
    11. //判断是否是闰年
    12. if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0))
    13. sum ++;
    14. map.put(i,sum);
    15. }
    16. }
    17. public String dayOfTheWeek(int day, int month, int year) {
    18. //先加上1971到year-1年有多少天
    19. int days = map.get(year-1);
    20. int[] months = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
    21. //month-1个月之前有多少天
    22. for (int i = 0; i <= month-2; i++) days += months[i];
    23. if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
    24. if (month > 2) days ++;
    25. //加上天数
    26. days += day;
    27. //1971年1月1日是星期五
    28. int week = days % 7;
    29. return weeks[week];
    30. }
    31. }