• 31. Next Permutation


        /*
         * 31. Next Permutation 
         * 2016-4-18 by Mingyang 
         * 这道题目开始自己想还不是很容易找到规律!!你比如说一个从后往前增加的序列就不需要next premutation,但是一旦遇到一个减少的数
         * 比如2,3,6,5,4,1
         * 1) 先从后往前找到第一个不是依次增长的数,记录下位置first。比如例子中的3,对应的位置是first; 2) 接下来分两种情况: 
         * (1)如果上面的数字都是依次增长的
         * ,那么说明这是最后一个排列,下一个就是第一个,其实把所有数字反转过来即可(比如(6,5,4,3,2,1)下一个是(1,2,3,4,5,6));
         * (2) 否则,如果first存在,从First开始往后找,找到第一个比他大的数,然后两个调换位置,比如例子中的4。
         * 调换位置后得到(2,4,6,5,3,1)。最后把p之后的所有数字倒序.2,4,1,3,5,6
         */
        // http://blog.csdn.net/linhuanmars/article/details/20434115
        public void nextPermutation(int[] num) {
            int n = num.length;
            if (n < 2)
                return;
            int index = n - 1;
            while (index > 0) {
                if (num[index - 1] < num[index])
                    break;
                index--;
            }
            if (index == 0) {
                reverseSort(num, 0, n - 1);
                return;
            } else {
                int val = num[index - 1];
                int j = n - 1;
                while (j >= index) {
                    if (num[j] > val)
                        break;
                    j--;
                }
                swap(num, j, index - 1);
                reverseSort(num, index, n - 1);
                return;
            }
        }
        private void swap(int[] num, int i, int j) {
            int tmp = num[i];
            num[i] = num[j];
            num[j] = tmp;
        }
        private void reverseSort(int[] num, int i, int j) {
            while (i < j)
                swap(num, i++, j--);
        }
  • 相关阅读:
    HTML 005 标题
    HTML 004 属性
    javascript的html编码函数 (htmlSpecialChars-处理特殊字符)
    js生成二维码实例(真实有效)
    sublime快捷键
    利用jq并且添加上cookie的网页换肤
    阻止表单的默认行为
    阻止事件冒泡
    js控制图片提示(鼠标滑过显示大图片)
    jQuery.cookie插件用法自我总结
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5406975.html
Copyright © 2020-2023  润新知