回文数
问题判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:
输入: 121输出: true
示例 2:
输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:你能不将整数转为字符串来解决这个问题吗?
思路解法一简单粗暴,直接将数字转成字符串,然后将字符串反转,比较2个字符串是否相等。
123def isPalindrome(self, x: int) -> bool: s=str(x) return s==s[::-1]
解法二将数字进行反转,原始数字不断模10,取模乘以10,直到原始数字等于0,比较最后得到的数字和原始数字是否相等。有2个特殊情况一定不是回文数,可以直接返回False:
负数
结尾为0,如果这个数字本身不等于0,但是结尾为0,肯定不是回文数,因为数字开头一定不会是0
12345678def isPalindro ...
狗屁不通文章生成器
介绍随便输入一个主题,生成一篇万字文章。本文直接引用了@menzi11的源码,大家如果有兴趣,可以进作者Github主页查看😄。
文章生成请输入一个主题:
window.$ = function (selector) {
return document.querySelector(selector);
}
let 主题 = "一天掉多少根头发"
let 论述 = [
"现在,解决主题的问题,是非常非常重要的。 所以, ",
"我们不得不面对一个非常尴尬的事实,那就是, ",
"主题的发生,到底需要如何做到,不主题的发生,又会如何产生。 ",
"而这些并不是完全重要,更加重要的问题是, ",
"主题,到底应该如何实现。 ",
"带着这些问题,我们来审视一下主题。 ",
"所谓主题,关键是主题需要如何写。 ",
"我们一般认为,抓住了问题的关键,其他一切则会迎刃而解。 ",
"问题的关键究竟为何? ",
"主题因何而发生?",
"每个人都不得不面对这些问题。 在面对这种问题时 ...
字节跳动面试题-水壶问题
问题给你一个装满水的 8 升满壶和两个分别是 5 升、3 升的空壶,请想个优雅的办法,使得其中一个水壶恰好装 4 升水,每一步的操作只能是倒空或倒满。
思路先想想用人脑如何解决这个问题,模拟将水从一个水壶倒进另一个水壶,使得各个水壶水的体积不断变化,一步步尝试和推导,比如先正向推导,从已知状态推导后续状态,再反向推导,从结果状态往前推导,2种状态某一刻相同了,说明求出了答案,此方式较考验大脑的记忆能力和逻辑思维能力。程序的方式和人脑相似,不过更为简单粗暴,俗称广度优先遍历剪枝算法,从初始状态开始,衍生出后续状态,每个后续状态只能是前一个状态下,从其中一个水壶倒向另一个水壶的一步操作,比如从(8,0,0)开始,只能倒水一次,则后续状态只能是(3,5,0)和(5,0,3),再从这2个状态继续向后衍生。所谓剪枝,是指后续状态不能再和前面任何一个状态重复。一直往后衍生,直到没有后续,或者找到了一种状态,表示正好有个水壶的水是4升。采用广度优先遍历,可保证我们的结果一定是最优解,也就是使用倒水的步骤一定是最少的。
从一个状态衍生后续状态的代码,倒水过程:
12345678910111213#从 ...
命令模式(Command)
意图命令模式是一种行为型模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。简单来说,命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。
问题假如你正在开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编辑器的不同操作。你创建了一个非常简洁的按钮类,它不仅可用于生成工具栏上的按钮,还可用于生成各种对话框的通用按钮。
尽管所有按钮看上去都很相似,但它们可以完成不同的操作(打开、保存、打印和应用等)。你会在哪里放置这些按钮的点击处理代码呢?最简单的解决方案是在使用按钮的每个地方都创建大量的子类。这些子类中包含按钮点击后必须执行的代码。
你很快就意识到这种方式有严重缺陷。首先,你创建了大量的子类,当每次修改基类按钮时,你都有可能需要修改所有子类的代码。简单来说,GUI代码以一种拙劣的方式依赖于业务逻辑中的不稳定代码。
还有一个部分最难办。复制/粘贴文字等操作可能会在多个地方被调用。例如用户可以点击工具栏上小小的 “复制” 按钮,或 ...
三数之和
问题给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。LeetCode原题入口
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]
思路如果简单采用暴力遍历的方式,时间复杂度为$ O(n^3) $,时间上肯定无法通过。可先对数组进行排序,时间复杂度为$ O(n\log n) $,接着从数组第一个数开始遍历,在剩下的数中取2数之和,正好等于第一个数的相反数,这样3者之和正好为0。设置第一个指针遍历数组,假设遍历到的当前数为x,则要找的2数之和target=-x,由于数组已经经过排序,后面2数可再用2个指针表示,1个指向第1个数的后一个数,也就是正好大于x的数,另1个指向数组最后一位,也就是最大的那个数。计算2个指针所指向数字之和,如果结果大于target,说明结果偏大,将第2个指针向左移动;如果结果小于target,将第1个指针向右移动,使 ...