算法题解-面试题 08.06. 汉诺塔问题
1.题目描述面试题 08.06. 汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
你需要原地修改栈。
示例1:
12输入:A = [2, 1, 0], B = [], C = []输出:C = [2, 1, 0]
示例2:
12输入:A = [1, 0], B = [], C = []输出:C = [1, 0]
提示:
A中盘子的数目不大于14个。
2.代码实现12345678910111213141516class Solution { public void hanota(List<Integer> A, List<Integer ...
算法题解-344. 反转字符串
1.题目描述344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
12输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]
示例 2:
12输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]
2.代码实现1234 ...
算法题解-206. 反转链表
1.题目描述206. 反转链表
反转一个单链表。
示例:
12输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL
进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
2.代码实现1234567891011121314151617181920212223242526272829303132333435363738394041package swu.xl.algorithm.code_03_10.experiment_3;public class Solution { /** * leetcode P206 反转链表 * @param head * @return */ public ListNode reverseList(ListNode head) { ListNode result = null; ListNode cur = head; ...
算法题解-118. 杨辉三角
1.题目描述118. 杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
123456789输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]
2.代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445package swu.xl.algorithm.code_03_10.experiment_2;import java.util.ArrayList;import java.util.List;public class Solution { /** * leetcode P118 杨辉三角 * @param numRows * @return */ public List<List<Integer>> ge ...
算法题解-704. 二分查找
1.题目描述704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
123输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4
示例 2:
123输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。n将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。
2.代码实现1234567891011121314151617181920212223242526272829303132333435363738394041package swu.xl.algorithm.code_03_03.experiment_4;public class Solution ...
算法题解-278. 第一个错误的版本
1.题目描述278. 第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。
你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。
示例:
1234567给定 n = 5,并且 version = 4 是第一个错误的版本。调用 isBadVersion(3) -> false调用 isBadVersion(5) -> true调用 isBadVersion(4) -> true所以,4 是第一个错误的版本。
2.代码实现123456789101112131415161718public int firstBadVersion(int n) { int l ...
算法题解-74. 搜索二维矩阵
1.题目描述74. 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
12345678输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true
示例 2:
12345678输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 13输出: false
2.代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647class Solution { public boolean searchMatrix(int[][] matrix, int targe ...
算法题解-35. 搜索插入位置
1.题目描述35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
12输入: [1,3,5,6], 5输出: 2
示例 2:
12输入: [1,3,5,6], 2输出: 1
示例 3:
12输入: [1,3,5,6], 7输出: 4
示例 4:
12输入: [1,3,5,6], 0输出: 0
2.代码描述123456789101112131415161718192021222324252627282930313233class Solution { public int searchInsert(int[] nums, int target) { //划分范围的index int leftIndex = 0; int rightIndex = nums.length-1; while(leftIndex != rightIn ...