アルゴリズム:leetcode 1154.1年の何日目


アルゴリズム:leetcode 1154.1年の何日目
  • タイトル説明
  • 要点
  • コード
  • 知識点
  • タイトルの説明
    YYYY-MM-DD形式で日付を表す文字列dateをあげます.その日付がその年の数日目であることを計算して返してください.
    通常、1月1日は毎年の1日目、1月2日は毎年の2日目と考えられています.毎月の日数は現行の紀元紀年法(グリコ暦)と一致している.
    例1:
    入力:date=“2019-01-09”出力:9
    例2:
    入力:date="2019-02-10"出力:41
    例3:
    入力:date=“2003-03-01”出力:60
    例4:
    入力:date=“2004-03-01”出力:61
    ヒント:
    date.length == 10
    date[4] == date[7] == '-',    date[i]     。
    date        1900   1   1    2019   12   31  。
    

    要点
  • うるう年:普通うるう年:4で除かれ、100で除かれない年.世紀閏年:400の整数倍の西暦年です.ここでは普通の閏年で計算します.
  • 考え方
  • まず文字列から年、月、日を抽出し、Int型に変換します.データでspit("-")分割により文字列配列が得られる.Integerを呼び出しますparseInt()はそれぞれyear,month,dayを得た.
  • は、1年の各月の日数を1次元配列[]aで格納する(2月28).
  • 以降、yearが閏年でmonth>=3の場合、resultはa[1]+...+a[month-1]+dayと判断した.そうでない場合、resultはいずれもa[1]+...+a[i-1]+dayである.


  • コード#コード#
    class Solution {
        public int dayOfYear(String date) {
            String []time=date.split("-");
            int num=0;
            int year = Integer.parseInt(time[0]);
            int month=Integer.parseInt(time[1]);
            int day=Integer.parseInt(time[2]);
            int []a = {31,28,31,30,31,30,31,31,30,31,30,31};
            if(year%4==0&&year%100!=0){
            for(int i = 1;i < month;i++){
                num+=a[i-1];
            }
            if(month>=3)
            num++;
            num+=day;
            return num;}
            else 
            for(int i = 1;i < month;i++){
                num+=a[i-1];
            }
            num+=day;
            return num;    
        }
    }
    

    インテリジェントポイント
    1.spit()関数は、文字列を文字列配列に区切るために使用されます.2.閏年の判別方式