题解 | #永远有多远#

永远有多远

http://www.nowcoder.com/questionTerminal/6e0db09b8ea743c9811f85083562da56

public class Solution {


    int mon[] = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
    boolean isYear(int year){
        if((year%4==0&&year%100!=0)||year%400==0)return true;
        return false;
    }
    boolean check(int y1, int m1, int d1, int y2, int m2, int d2){
        if(y2<y1) return false;
        else if(y1 == y2 && m2 <m1) return false;
        else if(y1 == y2 && m2 ==m1 && d2<d1) return false;
        return true;
    }

    public int workdays_between (int y1, int m1, int d1, int y2, int m2, int d2) {
        // write code here
        if(!check(y1, m1, d1, y2, m2, d2))return 0;
        long days = 0;
        for (int i = 1; i < y1; i++) {
            if(isYear(i))days+=366;
            else days+=365;
        }
        for (int i = 1; i < m1; i++) {
            if(i==2&&isYear(y1))days+=29;
            else days+=mon[i];
        }
        days+=d1;


        long res = 0;
        if(y2>y1){
            for (int i = y1+1; i < y2; i++) {
                if(isYear(i))res+=366;
                else res+=365;
            }
            if(m1 == 2&&isYear(y1)) res += 29 - d1;
            else res += mon[m1]-d1;
            for (int i = m1+1; i <= 12 ; i++) {
                if(i==2&&isYear(y1))res+=29;
                else res+=mon[i];
            }
            for (int i = 1; i < m2 ; i++) {
                if(i==2&&isYear(y2))res+=29;
                else res+=mon[i];
            }
            res += d2;
        }else {
            if(m2>m1){
                if(m1 == 2&&isYear(y1)) res += 29 - d1;
                else res += mon[m1]-d1;
                for (int i = m1+1; i < m2; i++) {
                    if(i==2&&isYear(y1))res+=29;
                    else res+=mon[i];
                }
                res += d2;
            }else{
                res += d2 -d1;
            }
        }
        int ans = 0;
        int w =(int) days%7;
        //System.out.println(w+" "+isYear(2016)+" "+res);
        int r =0;
        if(w!=1){
            if(w==0) r = 1;
            else r = 7 - w + 1;
        }

        if(res>=r){
            if(w!=1&&r>=2) ans += r - 2;
            res -= r;
            ans += res - (res/7)*2 ;
            if(res%7>5)ans-=1;
        }else {
           int t = 6-w;
           if(t>=res) ans+=res;
           else ans +=t;
        }

        return ans;
    }



}
全部评论

相关推荐

1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务