Java后台如何判断一串数字是否连续,连续合并数字

例如:Integer[] NoNum ={1,2,3,5,7,8,9,10,13}

        输出的结果为 1-3,5,7-10,13

这个简单,写一个状态机搞定:

state 表示状态,0表示开始状态或者前面的是独立的
1表示在连续之中
2表示最后一个
状态迁移图

图片说明

class Untitled {
    public static void main(String[] args) {
        int[] NoNum ={1,2,3,5,7,8,9,10,13};
        int state = 0;
        String result = "";
        for (int i = 0; i < NoNum.length; i++)
        {
            if (i == NoNum.length - 1) state = 2;
            if (state == 0) 
            {
                if (NoNum[i + 1] == NoNum[i] + 1) 
                {
                    result += Integer.toString(NoNum[i]);
                    result += "-";
                    state = 1;
                }
                else
                {
                    result += Integer.toString(NoNum[i]);
                    result += ",";
                }
            }
            else if (state == 1)
            {
                if (NoNum[i + 1] != NoNum[i] + 1) 
                {
                    result += Integer.toString(NoNum[i]);
                    result += ",";
                    state = 0;
                }
            }
            else
            {
                result += Integer.toString(NoNum[i]);
            }
        }
        System.out.println(result);
    }
}

上机验证结果:
1-3,5,7-10,13

这是递归的做法。

 public class Main {
    public static void main(String[] args) {
        Integer[] NoNum = {1, 2, 3, 5, 7, 8, 9, 10, 13};
        String result = convert(NoNum, 0);
        System.out.println(result.substring(0, result.length() - 1));
    }

    public static String convert(Integer[] ints, int index) {
        int end = index;
        if (ints.length == index) {//结束条件,遍历完数组
            return "";

        } else {
            for (int i = index; i < ints.length; i++) {
                if (i < ints.length - 1) {
                    if (ints[i] + 1 == ints[i + 1]) {
                        end = i;
                    } else {
                        if (i > index)
                            end = end + 1;
                        break;
                    }
                } else {
                    if (end == ints.length - 2) {
                        end = ints.length - 1;
                        break;
                    }
                }
            }
            if (index == end)//相等说明不连续
                return ints[index] + "," + convert(ints, end + 1);
            else//连续
                return ints[index] + "-" + ints[end] + "," + convert(ints, end + 1);

        }

    }
}