【LeetCode每日一题】1185.一周中的第几天(模拟+调用库函数:三种方法)

2023-12-30

一周中的第几天

在这里插入图片描述

  • 提示:给出的日期一定是在 19712100 年之间的有效日期。
方法一:模拟
思路
  • 1.可以根据1970年的最后一天(周四),计算出和输入日期间隔了几天(ans+之前的年份天数和+当前的月份天数和+输日的天数)

  • 2.求出具体的天数之后进行取模,得到具体的星期

步骤

1.定义一个字符串类型的数组,大小为7,记录星期字典

定义一个int类型的数组,大小为12,记录12个月份分别对应的天数(闰年进行判断)

2.定义一个初始天数ans=4(从周四开始)

3.从1971年开始遍历,直到输入的年份,判断当前年是否为闰年,初始值加上对应的天数

4.遍历月份直到输入月份,二月的情况根据是否是闰年来加上额外的一天

5.最后加上输入的天数,所求之和取模

    static String[] week =new String[] {
   "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
    //每周对应的星期
    static int[] nums = new int[]{
   31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    //每个月对应的天数
    public String dayOfTheWeek(int day, int month, int year) {
   
        int ans = 4;//初始值为4,从周四开始
        for (int i = 1971; i < year; i++) {
   
            boolean isLeapYear = (i % 4 == 0 && i % 100 != 0) || i % 400 == 0;
            //判断是否为闰年
            ans += isLeapYear ? 366 : 365;
            //是闰年加366,不是加355
        }
        for (int i = 1; i < month; i++) {
   
            ans += nums[i - 1];
            //之前的月份数之和
            if (i == 2 && ((year % 4 == 0 && year% 100 != 0) || year % 400 == 0)){
   
                ans++;//如果当前是闰年,单独加1
            }
        }
        ans += day;//加上输入的天数
        return week[ans % 7];
        //求模返回对应星期
    }
方法二:调用库函数

1.使用LocalDate.of(year, month, day)创建了一个LocalDate对象date,表示给定的日期。LocalDate是Java 8中新增的日期类,用于处理日期相关操作。(Java8新增)

2.通过调用date.getDayOfWeek()方法获取该日期的星期几信息,getDayOfWeek()返回的是一个DayOfWeek枚举类型,表示星期几。

3.最后,通过调用getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH)方法,将星期几信息以全名的形式返回,使用英语的地区设置。

import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.*;

class Solution {
   

    public String dayOfTheWeek2(int day, int month, int year) {
   
        LocalDate date = LocalDate.of(year, month, day);
        //创建了一个`LocalDate`对象`date`,表示给定的日期
        return date.getDayOfWeek().getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH);
        //方法获取该日期的星期几信息
        //将星期几信息以全名的形式返回,使用英语的地区设置
    }
方法三:调用库函数

1.首先声明了一个私有的静态变量calendar,并调用其静态方法getInstance()获取一个默认时区的Calendar实例。然后声明了一个私有的静态变量weekFormat,它是一个SimpleDateFormat对象,用于格式化星期几信息。

2.使用set(year, month - 1, day)方法将calendar设置为给定日期。由于Calendar中的月份从0开始,所以需要将传入的month减去1

3.使用weekFormat.format(calendar.getTime())方法将calendar中的时间格式化为星期几的字符串,其中weekFormat是一个SimpleDateFormat对象,通过设置格式为"EEEE"来表示星期几的全名形式

    private static final Calendar calendar = Calendar.getInstance();
//获取一个默认时区的`Calendar`实例
    private static final SimpleDateFormat weekFormat = new SimpleDateFormat("EEEE");
//格式化星期几信息

    public String dayOfTheWeek3(int day, int month, int year) {
   
        calendar.set(year, month - 1, day);
       // 将`calendar`设置为给定日期
        return weekFormat.format(calendar.getTime());
        //`calendar`中的时间格式化为星期几的字符串
    }

点击移步博客主页,欢迎光临~

偷cyk的图

相关推荐

  1. LeetCode 1185.

    2023-12-31 08:42:04       54 阅读
  2. LC 1185.

    2023-12-31 08:42:04       59 阅读
  3. 算法每日 | 日历类题目

    2023-12-31 08:42:04       60 阅读
  4. 2023.12.30力扣每日——

    2023-12-31 08:42:04       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-31 08:42:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-31 08:42:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-31 08:42:04       82 阅读
  4. Python语言-面向对象

    2023-12-31 08:42:04       91 阅读

热门阅读

  1. [原创][R语言]股票分析实战[5]:加载股票数据

    2023-12-31 08:42:04       61 阅读
  2. CentOS 8 上安装 Python 3.10.12

    2023-12-31 08:42:04       58 阅读
  3. Docker启动各种服务

    2023-12-31 08:42:04       56 阅读
  4. 【12.30】转行小白历险记-刷算法06

    2023-12-31 08:42:04       61 阅读
  5. 腾讯云系统盘50G通用型SSD云硬盘不够用怎么办?

    2023-12-31 08:42:04       64 阅读
  6. 全面指南:掌握GitHub Actions(官网导航链接)

    2023-12-31 08:42:04       61 阅读