7对数字

Posted 机智的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7对数字相关的知识,希望对你有一定的参考价值。


今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:

17126425374635

当然,如果把它倒过来,也是符合要求的。

请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。

注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。

public class Main {
    public static void main(String[] args) {
        f("74112243735566".toCharArray(), 0);  //这边整理一下填入的数据其实就是一步剪枝
    }
    private static void f(char[] arr, int step) {
        if(step == arr.length - 1) {
            if(arr[0] == ‘7‘ && arr[1] == ‘4‘ && arr[8] == ‘7‘ && arr[6] == ‘4‘ && g(String.valueOf(arr))) {
                System.out.println(String.valueOf(arr));  //我们只需要答案就够了,所以不用优化
            }                                              //g方法判断放前面还是放后面也有讲究
            return;
        }
        for(int i = step; i < arr.length; i ++) {
            char t = arr[step];
            arr[step] = arr[i];
            arr[i] = t;
            
            f(arr, step + 1);
            
            t = arr[step];
            arr[step] = arr[i];
            arr[i] = t;
        }
    }
    private static boolean g(String s) {
        for(int i = 1; i <= 7; i ++) {
            if(s.lastIndexOf(i + 48) - s.indexOf(i + 48) - 1 != i) {  //里面是ASCII码
                return false;
            }
        }
        return true;
    }
}

 

以上是关于7对数字的主要内容,如果未能解决你的问题,请参考以下文章

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

What's new in C# 7.0

What's new in C# 7.0

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

golang代码片段(摘抄)