LeetCode.1185-一周中的星期幾(Day of the Week)

這是小川的第415次更新封恰,第448篇原創(chuàng)

看題和準(zhǔn)備

今天介紹的是LeetCode算法題中Easy級(jí)別的第266題(順位題號(hào)是1185)耘分。給定日期,返回該日期的星期幾它褪。輸入為三個(gè)整數(shù)饵骨,分別代表日,月和年茫打。

以下列值之一返回答案:{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}居触。

例如:

輸入:day = 31, month = 8, year = 2019
輸出:"Saturday"

輸入:day = 18, month = 7, year = 1999
輸出:"Sunday"

輸入:day = 15, month = 8, year = 1993
輸出:"Sunday"

約束

  • 給定的日期是1971年至2100年之間的有效日期。

第一種解法

題目要求我們計(jì)算給定日期是星期幾老赤,直接調(diào)用Calendar類(lèi)的API轮洋,如果是面試不建議這么做。

public String dayOfTheWeek(int day, int month, int year) {
    String[] week = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"};
    Calendar cal = Calendar.getInstance();
    cal.set(year, month-1, day);
    int i = cal.get(Calendar.DAY_OF_WEEK)-1;
    if (i<0) {
        i = 0;
    }
    return week[i];
}


第二種解法

第一步抬旺,先算出從1971年距離當(dāng)前年份的前一年總共有多少天弊予,平年加365天,閏年加366天开财。

第二步汉柒,再計(jì)算給的月份的前幾個(gè)月的天數(shù)之和,閏年2月有29天责鳍。

第三步碾褂,再加上給的天數(shù)減去1天,因?yàn)轭}目給的示例中星期天是第一天历葛。

第四步正塌,將最后得到的天數(shù)再加上5天,因?yàn)?971年1月1日是星期五恤溶,然后對(duì)7取余乓诽。

public String dayOfTheWeek2(int day, int month, int year) {
    String[] week = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"};
    int[] dayOfMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
    int total = 0;
    for (int i=1971; i<year; i++) {
        if (i%4 == 0) {
            total++;
        }
        total += 365;
    }
    if (year%4 == 0) {
        dayOfMonth[1] = 29;
    }
    for (int j=0; j<month-1; j++) {
        total += dayOfMonth[j];
    }
    total += day - 1;
    return week[(total + 5)%7];
}


第三種解法

利用蔡勒公式來(lái)解。

w =  (c/4- 2*c + y + y/4 + 26*(m + 1)/10 + d - 1) % 7;
  • c:代表世紀(jì)咒程,是年份的前兩位鸠天,比如1971,c就為19帐姻。

  • y:是年份的后兩位稠集,比如1971,y就是71卖宠。

  • m:代表月巍杈,3<= m <= 14,某年的1扛伍、2月要看作上一年的13筷畦、14月來(lái)計(jì)算,比如2003年1月1日,要看作2002年的13月1日來(lái)計(jì)算鳖宾。

  • d:代表日吼砂。

  • w:計(jì)算結(jié)果,代表星期幾鼎文。

有一點(diǎn)需要注意渔肩,利用蔡勒公式算出來(lái)的數(shù),有可能為負(fù)數(shù)拇惋,因此需要加上7周偎,再取余一次,才能當(dāng)作索引去字符串?dāng)?shù)組里取值撑帖。

public String dayOfTheWeek3(int day, int month, int year) {
    String[] week = { "Sunday", "Monday", "Tuesday", 
            "Wednesday", "Thursday", "Friday", "Saturday" };
    //如果月份小于3月蓉坎,則月份加12,年份減1
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int J = year / 100; // 世紀(jì)胡嘿,年份前兩位
    int K = year % 100; // 年份蛉艾,年份后兩位
    int h = (K + K / 4 + J / 4 - 2 * J +
             26 * (month + 1) / 10 + day - 1) % 7;
    // h算出來(lái)可能為負(fù)數(shù),需要補(bǔ)7后再取一次余
    return week[(h + 7) % 7];
}


第四種解法

利用基姆拉爾森公式來(lái)計(jì)算衷敌。

Week = (Day + 2*Month + 3*(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7;

如果月份小于3月勿侯,則月份加12,年份減1缴罗。對(duì)于星期幾助琐,在基姆拉爾森公式里,星期一是排在第一位瞒爬,星期天排在最后一位弓柱。

public String dayOfTheWeek4(int day, int month, int year) {
    String[] week = {"Monday", "Tuesday", "Wednesday", 
            "Thursday", "Friday", "Saturday", "Sunday"};
    if (month < 3) {
        month += 12;
        year -= 1;
    }
    int w = (day + 2*month + 3*(month+1)/5 + 
            year + year/4 - year/100 + year/400) % 7;
    return week[w];
}


小結(jié)

算法專(zhuān)題目前已更新LeetCode算法題文章272+篇沟堡,公眾號(hào)對(duì)話(huà)框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】侧但、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞航罗,獲取系列文章合集禀横。

以上就是全部?jī)?nèi)容,如果大家有什么好的解法思路粥血、建議或者其他問(wèn)題柏锄,可以下方留言交流,點(diǎn)贊复亏、留言趾娃、在看就是對(duì)我最大的回報(bào)和支持!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缔御,一起剝皮案震驚了整個(gè)濱河市抬闷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖笤成,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评架,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡炕泳,警方通過(guò)查閱死者的電腦和手機(jī)纵诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)培遵,“玉大人浙芙,你說(shuō)我怎么就攤上這事∽淹螅” “怎么了茁裙?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)节仿。 經(jīng)常有香客問(wèn)我晤锥,道長(zhǎng),這世上最難降的妖魔是什么廊宪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任矾瘾,我火速辦了婚禮,結(jié)果婚禮上箭启,老公的妹妹穿的比我還像新娘壕翩。我一直安慰自己,他們只是感情好傅寡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布放妈。 她就那樣靜靜地躺著,像睡著了一般荐操。 火紅的嫁衣襯著肌膚如雪芜抒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天托启,我揣著相機(jī)與錄音宅倒,去河邊找鬼。 笑死屯耸,一個(gè)胖子當(dāng)著我的面吹牛拐迁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疗绣,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼线召,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了多矮?” 一聲冷哼從身側(cè)響起缓淹,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后割卖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體前酿,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年鹏溯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罢维。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丙挽,死狀恐怖肺孵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颜阐,我是刑警寧澤平窘,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凳怨,受9級(jí)特大地震影響瑰艘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肤舞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一紫新、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧李剖,春花似錦芒率、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至德玫,卻和暖如春匪蟀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背化焕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工萄窜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铃剔,地道東北人撒桨。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像键兜,于是被迫代替她去往敵國(guó)和親凤类。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 上次給大家分享了《2017年最全的excel函數(shù)大全(5)——邏輯函數(shù)》普气,這次分享給大家日期和時(shí)間函數(shù)(上)谜疤。 D...
    幸福的耗子閱讀 5,777評(píng)論 0 5
  • 這是小川的第410次更新,第442篇原創(chuàng) 看題和準(zhǔn)備 今天介紹的是LeetCode算法題中Easy級(jí)別的第261題...
    程序員小川閱讀 431評(píng)論 0 2
  • 最近項(xiàng)目中用到自定義日歷組件,找來(lái)找去夷磕,最后發(fā)現(xiàn)GitHub的material-calendarview這個(gè)項(xiàng)目最...
    colin2017閱讀 1,526評(píng)論 0 0
  • 學(xué)習(xí)了《愚公移山》一文履肃,課后作業(yè)要求改寫(xiě)其中的一段,我們的部分學(xué)生改寫(xiě)了全文坐桩,真是想象豐富转锈,值得獎(jiǎng)勵(lì)灾而。 《愚公移山...
    筱華de小天地閱讀 3,448評(píng)論 1 3
  • 有太多不知道怎么回的微信,又不想得罪朋友,想發(fā)一連串的文字表達(dá)些不知道是什么的東西蟹倾,卻發(fā)現(xiàn)有太多東西不能去表達(dá),原...
    芫葫閱讀 278評(píng)論 3 2