题意整理。

  • 输入任意一个年份,输出该年内各个月份的天数。

方法一(字符串分割)

1.解题思路

  • 首先通过字符串分割得到具体的年、月、日、时、分、秒。
  • 将日期调整成"yyyy-MM-dd HH:mm:ss"的格式,并进行解析。
  • 输出北京时间和纽约时间,计算纽约时间时,在北京时间的基础上减去12小时。

图解展示: alt

2.代码实现

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();

        //将输入的日期用空格分割成字符串数组
        String[] arr=str1.split(" ");
        //如果不是6位长度,则输入不正常
        if(arr.length!=6){
            System.out.println("您输入的数据不合理");
        }
        else{
            //将日期调整成"yyyy-MM-dd HH:mm:ss"的格式
            String str=arr[0]+"-"+arr[1]+"-"+arr[2]+" "+arr[3]+":"+arr[4]+":"+arr[5];
            //解析日期
            Date date=sdf.parse(str);
            //输出北京时间
            System.out.println("北京时间为:"+sdf.format(date.getTime()));
            //输出纽约时间
            System.out.println("纽约时间为:"+sdf.format(date.getTime()-(long)12*60*60*1000));
        }

    }
}

3.复杂度分析

  • 时间复杂度:由于分割的字符串为固定的常数长度,所以时间复杂度为O(1)O(1)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)