我正在做leetcode Q 230。
问题是
给定一个二叉搜索树,写一个函数kthSmallest来找到其中的第k个最小元素。
我搜索了一个解决这个问题的方法,解决方案提到将两个变量包装到包装类中可能会很好。我不知道如何在包装类中包装这两个变量(数字和计数),它的用处是什么?我知道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);
}
答案 0 :(得分:1)
我不知道如何在包装类中包装这两个变量(数字和计数)
您需要创建一个自定义的类,其中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;
}
}
它的用处是什么?
除了LeeCode执行提交代码的方式之外,创建包装类对于封装也是有益的。如上面的代码,您可以将counter
和result
封装到一个类中,以及一些必要的方法,如测试方法isDone
和方法decreaseCount
。
helper
方法?它是一种递归方法,但我不认为终止条件是正确的。
答案 1 :(得分:0)
LeetCode(和大多数在线编程站点)执行的策略是执行您在自己的类中键入的任何代码。
拥有static
变量会使它们保持在该类的范围内,因此,没有必要在您自己的方法之间传递它们。
隐藏“包装类”
你也可以自己做这个
class Wrapper {
public static int number, count;
}
访问Wrapper.number
和Wrapper.count