在java中将两个变量包装到包装器类中
我正在做leetcodeq230。 问题是 给定一个二元搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。在java中将两个变量包装到包装器类中,java,Java,我正在做leetcodeq230。 问题是 给定一个二元搜索树,编写一个函数kthSmallest来查找其中第k个最小的元素。 我在谷歌上搜索了这个问题的一个解决方案,该解决方案提到将两个变量封装到一个包装器类中可能会很好。我不知道如何在包装器类中包装这两个变量(number和count),以及它的用途是什么?我知道Integer是int的包装类 ***better keep these two variables in a wrapper class*** private static in
我在谷歌上搜索了这个问题的一个解决方案,该解决方案提到将两个变量封装到一个包装器类中可能会很好。我不知道如何在包装器类中包装这两个变量(number和count),以及它的用途是什么?我知道Integer是int的包装类
***better keep these two variables in a wrapper class***
private static int number = 0;
private static int count = 0;
public int kthSmallest(TreeNode root, int k) {
count = k;
helper(root);
return number;
}
public void helper(TreeNode n) {
if (n.left != null) helper(n.left);
count--;
if (count == 0) {
number = n.val;
return;
}
if (n.right != null) helper(n.right);
}
LeetCode(和大多数在线编程站点)的策略是执行您在自己的类中键入的任何代码 在那里有
静态
变量将使它们保持在该类的范围内,因此,不必在您自己的方法之间传递它们
“包装器类”是隐藏的
你也可以自己做
class Wrapper {
public static int number, count;
}
并访问Wrapper.number
和Wrapper.count
我不知道如何在包装器类中包装这两个变量(number和count)
您需要创建一个自定义类,将count
和number
作为字段,类似于:
class KthSmallestElementWrapper<T> {
private int kth;
private T result;
public KthSmallestElementWrapper(int kth) {
this.kth = kth;
}
public static KthSmallestElementWrapper of(int kth) {
return new KthSmallestElementWrapper(kth);
}
public boolean isDone() {
return kth == 0;
}
public T getResult() {
if (result == null) {
throw new RuntimeException("Result not found");
}
return result;
}
public void decreaseCount() {
kth--;
}
public void setResult(T t) {
this.result = t;
}
}
KTHSmalestlementWrapper级{
私人int kth;
私人T结果;
公共KTHsmallestlementWrapper(内部kth){
this.kth=kth;
}
公共静态KTHSmalestlementWrapper of(整数kth){
返回新的kth锤式锤击机(kth);
}
公共布尔isDone(){
返回kth==0;
}
公共T getResult(){
如果(结果==null){
抛出新的RuntimeException(“未找到结果”);
}
返回结果;
}
公共无效递减计数(){
kth--;
}
公共无效设置结果(T){
结果=t;
}
}
它有什么好用
除了LeeCode执行提交代码的方式外,创建包装器类还有利于封装。正如上面的代码,您可以将计数器
和结果
封装为一个类,以及一些必要的方法,如testmethodisDone
和methoddecreaseCount
顺便问一下,你测试过你的
helper
方法吗?这是一个递归方法,但我不认为终止条件是正确的。你的问题会更清楚,看看这些方法在哪里被调用……我很确定它们只是有一个简单的java类,有两个字段number和count谢谢你的回答,但leetcode没有提供调用方的名称。我在尝试传递变量转换为方法时,解决方案是错误的。这将是一个逻辑错误,然后感谢您的回复。我发现将变量设置为静态和将变量包装到类中基本上没有区别。那么为什么将变量包装到类中更好呢?不管怎样,变量都在类中。真正的问题是,在退出方法时,它们是否在方法中被重置,或者是否在整个类中保持作用域。