将两个变量包装到java中的包装类中

时间:2017-03-08 23:31:00

标签: java

我正在做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);
}

2 个答案:

答案 0 :(得分:1)

  

我不知道如何在包装类中包装这两个变量(数字和计数)

您需要创建一个自定义的类,其中countnumber为字段,如:

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执行提交代码的方式之外,创建包装类对于封装也是有益的。如上面的代码,您可以将counterresult封装到一个类中,以及一些必要的方法,如测试方法isDone和方法decreaseCount

顺便说一句,您是否测试了helper方法?它是一种递归方法,但我不认为终止条件是正确的。

答案 1 :(得分:0)

LeetCode(和大多数在线编程站点)执行的策略是执行您在自己的类中键入的任何代码。

拥有static变量会使它们保持在该类的范围内,因此,没有必要在您自己的方法之间传递它们。

隐藏“包装类”

你也可以自己做这个

class Wrapper {
    public static int number, count;
} 

访问Wrapper.numberWrapper.count