美文网首页
字典排序算法

字典排序算法

作者: Michaelhbjian | 来源:发表于2019-06-24 11:04 被阅读0次

在数学,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法 。

386.字典序排数(LeetCode)

题目如下:

给定一个整数 n, 返回从 1 到 n 的字典顺序。
例如,
给定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。

解题思路:

从输入的1开始遍历,分三种情况讨论:

  • 当n乘以10的时候小于N,就把10这个数加入list中;
  • 然后此时的n已经等于10了,再去判断11、12、13,通过n+1小于N来获得11、12、13;
  • 最后,此时的n等于13,通过(n/10)%10等到1,在加上1。从2开始找出剩下的值。

代码如下:

package com.zhoujian.solutions.leetcode;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhoujian123@hotmail.com 2018/8/12 11:24
 */
public class DicOrder {
    public static List<Integer> lexicalOrder(int n){
        ArrayList<Integer> list = new ArrayList<Integer>();
        int curr = 1;
        for (int i = 1; i <=n ; i++) {
            list.add(curr);
            if (curr*10 <=n) {
                curr*=10;
            }else if (curr%10!=9&&curr+1<=n){
                curr++;
            }else {
                while ((curr/10)%10 ==9){
                    curr/=10;
                }
                curr = curr/10+1;
            }
        }

        return list;
    }
    public static void main(String[] args) {
        List<Integer> arrayList = new ArrayList<Integer>();
        arrayList = lexicalOrder(13);
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }
    }
}

结果如下:

image.png

时间复杂度为O(n),空间复杂度为O(1)。

440.字典序的第k小数字

题目

给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。(**不是按照数字的标准,而是按照字典树的排序**)
注意:1 ≤ k ≤ n ≤ 109。

示例

输入:
n: 13   k: 2
输出:
10
解释:
字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。

从上面的代码可知,list中存放的已经是排序好的字典树。直接list.get(k-1)就可以得出答案了。

1.题目描述

小易在学校中学习了关于字符串的理论,于是他基于此完成了一个字典的项目。小易的这个字典很奇特,字典内的每个单词都包含n个“a”和m个“z”,并且所有单词按照字典序列。小易现在希望你能他找出第k个单词。

输入描述:输入包括一行三个整数n,m,k(1<=n,m<=100),1<=k<=10^9),以空格分割。
输出描述:输出第k个字典中的字符串,如果无解,输出-1

2.示例

输入:2 2 6
输出:zzaa

说明

字典中的字符串依次为aazz azaz azza zaaz zaza zzaa

相关文章

  • OC数组大小排序算法

    1、要排序的数组如下,数字里面是字典,字典有两对键值对,数组需要按照字典里temp大小进行排序。 2、排序算法如下...

  • 字典排序算法

    在数学,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序排列的方法...

  • 常用排序算法总结1一一冒泡排序

    前言 排序算法是一种能将一串数据依照特定排序方式进行排列的一种算法。最常用到的排序方式是数值顺序以及字典顺序。 有...

  • iOS 各种排序

    数组排序 数组中字典排序 数组中字典按照某个value排序 排序方法

  • Python dict排序

    sorted 函数按key值对字典排序 sorted 函数按value值对字典排序 字典列表排序

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • lambda

    针对字典进行排序 针对数组,其每个元素为字典,按照字典的某个key进行排序

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

网友评论

      本文标题:字典排序算法

      本文链接:https://www.haomeiwen.com/subject/aidnqctx.html