欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 【LeetCode 算法笔记】164. 破解闯关密码

【LeetCode 算法笔记】164. 破解闯关密码

2025/5/19 17:07:26 来源:https://blog.csdn.net/Sardar_/article/details/142900872  浏览:    关键词:【LeetCode 算法笔记】164. 破解闯关密码

目录

  • 问题描述
  • 冒泡排序

问题描述

问题来源

闯关游戏需要破解一组密码,闯关组给出的有关密码的线索是:

  • 一个拥有密码所有元素的非负整数数组 password
  • 密码是 password 中所有元素拼接后得到的最小的一个数

请编写一个程序返回这个密码。

示例 1:
输入: password = [15, 8, 7]
输出: “1578”

示例 2:
输入: password = [0, 3, 30, 34, 5, 9]
输出: “03033459”

提示:
0 < password.length <= 100

说明:
输出结果可能非常大,所以你需要返回一个字符串而不是整数
拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

冒泡排序

本质上是给数组进行排序。定义好比较规则后,选择一种排序算法实现即可,这里实现了冒泡排序。
假设 x x x y y y 是数组 n u m s nums nums 中的两个元素。则排序的判断规则如下所示:

  • 如果拼接字符串 x + y > y + x x + y > y + x x+y>y+x,则 x x x 大于 y y y y y y 应该排在 x x x 前面,从而使拼接起来的数字尽可能的小。
  • 反之,如果拼接字符串 x + y < y + x x + y < y + x x+y<y+x,则 x x x 小于 y y y x x x 应该排在 y y y 前面,从而使拼接起来的数字尽可能的小。
class Solution:def crackPassword(self, password: List[int]) -> str:n = len(password)str_password = list(map(str, password))for i in range(n-1,0,-1):for j in range(i):if str_password[j] + str_password[j+1] > str_password[j+1] + str_password[j]:str_password[j], str_password[j+1] = str_password[j+1], str_password[j]return ''.join(str_password)

冒泡排序的时间复杂度: O ( N 2 ) O(N^2) O(N2)
这里为了转化为字符串数组开辟了新的空间(一般情况下,标准的冒泡排序不需要额外空间),所以空间复杂度: O ( N ) O(N) O(N)

参考文献:
[1] 算法通关手册

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词