Java Help:确定数字是否可以形成序列

时间:2017-03-12 01:20:59

标签: java methods int boolean

对于我正在努力完成的任务,我有一个简短的问题。我正在编写一个带有三位数参数(0-9)的布尔方法,如果可以重新排列组成一个序列,则返回true。对我来说,困难的部分是0可以制作8,9或1,2的序列。假设三个数字都不同。要清楚,数字5,7,6是正确的,因为它可以重新排列为5,6,7,一个序列。 8,0,9也将返回true,但2,4,7不会。我希望有人能指出我正确的方向,任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:0)

您只需要检查两个测试的有效性:

  1. 所有数字都不同吗?
  2. 极端2之间的绝对差异是什么?
  3. 这会给你以下方法:

    public static boolean isSequence(int a, int b, int c) {
        if(a == 0) a = 10;
        if(b == 0) b = 10;
        if(c == 0) c = 10;
        //Add the commented-out lines to make it safe to use with non-different numbers.
        //boolean allDifferent = !(a == b) && !(b == c) && !(a == c);
        boolean extremesIsTwo = Math.abs(Math.max(Math.max(a, b), c)
            - Math.min(Math.min(a, b), c)) == 2;
        //return allDifferent && extremesIsTwo;
        return extremesIsTwo;
    }
    

    当你看到它时,它只是一个简单的逻辑问题,并找到答案的最短路径。可能有更优化的方法来做到这一点,但这很清楚,可读并且工作得很好。

    现在,如果你真的想要研究类似的问题,你可以尝试优化这个算法,或者找另一种方法来检查三个数字是一个序列。

    编辑此版本可扩展。即使你的要求是三个参数,我仍然会考虑这个解决方案,因为它使用OOP来避免重复代码。根据要求,它也不会检查重复项。

    public static boolean isSequenceScalable(List<Integer> list) {
        list = list.stream().map(i -> i = (i == 0) ? 10 : i).collect(Collectors.toList());
        list.sort(Integer::compareTo);
        if (Math.abs(list.get(0) - list.get(list.size() - 1)) == 2) return true;
        return false;
    }