设计停车系统

设计停车系统

难度:简单

请你给一个停车场设计一个停车系统。停车场总共有三种不同大小的车位:大,中和小,每种尺寸分别有固定数目的车位。

请你实现ParkingSystem类:

ParkingSystem(int big, int medium, int small)初始化ParkingSystem类,三个参数分别对应每种停车位的数目。
bool addCar(int carType)检查是否有carType对应的停车位。carType有三种类型:大,中,小,分别用数字 1,23表示。一辆车只能停在carType对应尺寸的停车位中。如果没有空车位,请返回false,否则将该车停入车位并返回true

示例 1:

输入:
["ParkingSystem", "addCar", "addCar", "addCar", "addCar"]
[[1, 1, 0], [1], [2], [3], [1]]
输出:
[null, true, true, false, false]

解释:
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);
parkingSystem.addCar(1); // 返回 true ,因为有 1 个空的大车位
parkingSystem.addCar(2); // 返回 true ,因为有 1 个空的中车位
parkingSystem.addCar(3); // 返回 false ,因为没有空的小车位
parkingSystem.addCar(1); // 返回 false ,因为没有空的大车位,唯一一个大车位已经被占据了

提示:

  • 0 <= big, medium, small <= 1000
  • carType取值为123
  • 最多会调用addCar函数1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-parking-system
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


public class ParkingSystem {
    private int bigNum;
    private int mediumNum;
    private int smallNum;

    public ParkingSystem(int big, int medium, int small) {
        this.bigNum = big;
        this.mediumNum = medium;
        this.smallNum = small;
    }

    public boolean addCar(int carType) {
        switch (carType) {
            case 1:
                return --bigNum >= 0;
            case 2:
                return --mediumNum >= 0;
            case 3:
                return --smallNum >= 0;
            default:
                return false;
        }
    }
}

  • 大佬写法
class ParkingSystem {

    int counts;

    public ParkingSystem(int big, int medium, int small) {
        counts = (small << 20) | (medium << 10) | big;
    }

    public boolean addCar(int carType) {
        int bit = ((carType-1)*10);
        if (((counts >> bit) & 0b1111111111) <= 0){
            return false;
        } else {
            counts -= 1 << bit;
            return true;
        }
    }
}

/**
 * Your ParkingSystem object will be instantiated and called as such:
 * ParkingSystem obj = new ParkingSystem(big, medium, small);
 * boolean param_1 = obj.addCar(carType);
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值