当前位置: 首页 > news >正文

386.字典序排序

解题分析

对区间1-n范围内的数字进行字典序排序,直观想到,字符串排序通常是按照字典序排序,例如下面各种语言的排序方式:

words = ["banana", "Apple", "apple", "Banana"]
words.sort()
String words = {"banana", "Apple", "apple", "Banana"};
Arrays.sort(words);
System.out.println(Arrays.toString(words));
let words = ["banana", "Apple", "apple", "Banana"];
wors.sort();

因此可以将1-n区间内的数字转换为字符串数组,然后排序,经过转换为数字数组返回结果,如下所示:

class Solution {public List<Integer> lexicalOrder(int n) {// 创建1-n的字符串数组List<String> arr_string = new ArrayList<>();// 将字符串添加到列表中for (int i = 1; i <= n; i++){arr_string.add(String.valueOf(i));}// 使用Arrays.sort()// 对字符串进行字典序排序Collections.sort(arr_string);// 将排序后的数组转换为数字数组返回List<Integer> result = new ArrayList<>();for (String s : arr_string){result.add(Integer.parseInt(s));}return result;}
}

这种方式o(nlogn),直接排序会使用额外o(n)空间存储字符串数组。为了达到o(1)空间,不能使用直接排序。
字典序即按照字典的顺序排序,在计算机中两个字符串的大小关系取决于两个字符串从左到右第一个不同字符的ASCII值的大小。
字典序实际上是数字的前序遍历。
整数num,例如n=13,下一个对应的字典序整数应满足下面的规则:

  • num * 10 <= n,则是下一个字典序,1x10=10 <13,所以是[1,10]
  • 反之说明已经排到了[1,10,11,12,13],则从1位开头的字典序已经排完了,应该是从num%10==9开始下一个,因此获取到下一个位数开头的或者说是num+1 > n,注意num/10之后+1

如下所示:

class Solution {public List<Integer> lexicalOrder(int n) {// 实际上是判断数字字典序,// 判断数字字典序有规则的// 新建返回结果的数组List<Integer> result = new ArrayList<>();int nums = 1;// 遍历for (int i = 1; i <= n; i++){result.add(nums);// 找到下一个if (nums * 10 <= n){nums *= 10;}else {while (nums%10 == 9 || nums + 1 > n){// 这一位的满足数找完了nums /= 10;}nums ++;}}return result;}
}

参考

字典序及1-n之间的数按字典序排列

java数组

声明数组:

  • int[] result = new int[n]; result[0] = 1;
  • int[] result = {1,2,3};
  • ArrayList是一个动态修改的数组,ArrayList<Integer> new ArrayList<>();
    • 使用add()方法添加元素
    • 使用get()方法访问元素
    • 使用set(int index, E element)
    • 使用remove()方法删除元素
    • 使用size()得到数量
    • 使用Collections.sort()进行排序

遍历数组:

  • 循环遍历数组for (int i = 0; i < result.length; i++)
  • For-Each循环for (int elem : result)

相关文章:

  • Xshell 8 客户端 免费版无需注册
  • 内核性能调优
  • Java八股文——Spring「SpringCloud 篇」
  • 代码随想录算法训练营第60期第六十五天打卡
  • C++默认构造函数被隐式删除
  • 某区域汽车多家4S店销售数据重叠度分析
  • 汇编(函数调用)
  • Node.js版本管理
  • LangChain文档加载器自动选择器:支持多种文件格式的统一加载方法
  • SpreadJS 在预算编制中的应用深度剖析
  • 日本滨松R669光电倍增管Hamamatsu直径51 mm 直径端窗型扩展红多碱光阴极面光谱灵敏度特性:300 至 900 nm
  • 生鲜商城源码系统设计+springboot3+vue3+JDK17(带用户协同过滤个性化推荐算法)
  • AX620Q上模型部署流程
  • Android Compose 自定义滑动进度条
  • JAVA CAS 详解
  • 【学习笔记】RTSP-Ovnif-GB28181
  • 5.Caffe
  • 如何抓取DP_AUX辅助通道数据
  • 简单实现shardingSphere + MybatisPlus分库分表2025
  • 【期末速成】软件项目管理
  • 网站信息备案查询/企业培训课程有哪些内容
  • 淘宝怎么做基础销量什么网站好/怎么引流怎么推广自己的产品
  • 怎么做好网站推广/seo快排公司哪家好
  • 浙江五联建设有限公司网站/深圳百度推广客服电话多少
  • 线上销售模式/seo软件排行榜前十名
  • 盘古网做网站多少钱/12月30日疫情最新消息