设计一个电话目录管理系统,让它支持以下功能:
get: 分配给用户一个未被使用的电话号码,获取失败请返回 -1
check: 检查指定的电话号码是否被使用
release: 释放掉一个电话号码,使其能够重新被分配
示例:
// 初始化电话目录,包括 3 个电话号码:0,1 和 2。
PhoneDirectory directory = new PhoneDirectory(3);
// 可以返回任意未分配的号码,这里我们假设它返回 0。
directory.get();
// 假设,函数返回 1。
directory.get();
// 号码 2 未分配,所以返回为 true。
directory.check(2);
// 返回 2,分配后,只剩一个号码未被分配。
directory.get();
// 此时,号码 2 已经被分配,所以返回 false。
directory.check(2);
// 释放号码 2,将该号码变回未分配状态。
directory.release(2);
// 号码 2 现在是未分配状态,所以返回 true。
directory.check(2);
解答:
class PhoneDirectory { /** Initialize your data structure here @param maxNumbers - The maximum numbers that can be stored in the phone directory. */ public PhoneDirectory(int maxNumbers) { ListNode head=new ListNode(0); this.head=head; for(int i=1;i<maxNumbers;i++){ head.next=new ListNode(i); head=head.next; } } private ListNode head; /** Provide a number which is not assigned to anyone. @return - Return an available number. Return -1 if none is available. */ public int get() { ListNode itr=head; while(itr!=null){ if(!itr.use){ itr.use=true; return itr.val; } itr=itr.next; } return -1; } /** Check if a number is available or not. */ public boolean check(int number) { ListNode itr=head; while(itr!=null){ if(itr.val==number){ return !itr.use; } itr=itr.next; } return false; } /** Recycle or release a number. */ public void release(int number) { ListNode itr=head; while(itr!=null){ if(itr.val==number){ itr.use=false; break; } itr=itr.next; } } public static class ListNode { private int val; private ListNode next; private Boolean use=false; public ListNode(int val) { this.val = val; } } } /** * Your PhoneDirectory object will be instantiated and called as such: * PhoneDirectory obj = new PhoneDirectory(maxNumbers); * int param_1 = obj.get(); * boolean param_2 = obj.check(number); * obj.release(number); */
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/design-phone-directory
原文:https://www.cnblogs.com/wuyouwei/p/11817209.html