矩阵中的路径问题
矩阵中的路径
问题要求
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。
示例:
输入:board =
(“A”,“B”,“C”,“E”),
(“S”,“F”,“C”,“S”),
(“A”,“D”,“E”,“E”),
//board定义一个二维数组,此处( 等同于花括号,由于与markdown内置标签冲突,故使用括号代替花括号。
word = “ABCCED”
输出:true
问题分析
本问题是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 解决。
算法原理
深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS 通过递归,先朝一个方向搜到底,再回溯至上个节点,沿另一个方向搜索,以此类推。
剪枝: 在搜索中,遇到 这条路不可能和目标字符串匹配成功 的情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为 可行性剪枝 。
算法剖析
递归参数: 当前元素在矩阵 ...
删除链表的结点及反向打印链表
删除链表的结点
问题陈述
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点,并返回删除后的链表的头节点。
思路分析
可定义一个结点,该结点的下一结点指向单链表的头结点head,以便于处理第一个元素。
代码实现
12345678910111213141516171819202122public class ListNode{ int val; ListNode next; ListNode(int x){ val=x; }}class solustion{ public ListNode deleteNode(ListNode head,int val){ ListNode firstNode=new ListNode(-1); //定义一个新节点 firstNode.next=head; ListNode curr=firstNode; //定义初始当前结点为新节点 if(curr!=n ...
剪绳子问题
剪绳子问题
问题概述
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m] 。请问 k[0]k[1]…*k[m] 可能的最大乘积是多少?
例如,当绳子的长度是8时, 我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
问题分析
数学推论
推论一: 将绳子 以相等的长度等分为多段 ,得到的乘积最大
推论二: 尽可能将绳子以长度 3 等分为多段时,乘积最大。
切分规则
最优:3。把绳子尽可能切为多个长度为 3的片段,留下的最后一段绳子的长度可能为 0,1,2三种情况。
次优:2 。若最后一段绳子长度为 2;则保留,不再拆为 1+1。
最差:1 。若最后一段绳子长度为 1;则应把一份 3+1 替换为 2+2,因为 2×2>3×1。
算法步骤
当 n≤3时,按照规则应不切分,但由于题目要求必须剪成 m段,因此必须剪出一段长度为 1的绳子,即返回 n−1 。
当 n>3时,求 n除以 3的 整数部分 a和 余数部分 b。即 n=3^a+b,并分为以下三种 ...
和为s的两个数字
和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例:
12输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]
问题解法
思路一
两个for循环。
代码实现
12345678910111213class Solution { int i,j; public int[] twoSum(int[] nums, int target) { for(i=0;i<nums.length;i++){ for(j=i;j<nums.length;j++){ if(nums[i]+nums[j]==target) return new int[] {nums[i],nums[j]}; } } return n ...
故时喜欢看夜空中的烟火
你知道吗?我喜欢夜空中的烟花。在那样漆黑的寂寂的夜里,她毫不隐秘的出现了!出现的那样的叫人惊喜交加!那是一种怎样的声色之美!我痴迷着,仰着头在一个刚刚远的距离痴痴的望着,她一定发现不了我。渐渐的,我喜欢上了抬头看烟花的姿态,也爱上了这个世界的五光十色。
你知道有一首歌《我》吗?我特别喜欢它的歌词,是林夕写的。
I am what I am
我永远都爱这样的我
快乐是快乐的方式不只一种
最荣幸是谁都是造物者的光荣
不用闪躲 为我喜欢的生活而活
不用粉墨 就站在光明的角落
我就是我是颜色不一样的烟火
天空海阔 要做最坚强的泡沫
我喜欢我 让蔷薇开出一种结果
孤独的沙漠里 一样盛放的赤裸裸
一字一句,写成了我喜欢的样子!想来我的生命,又何尝不是如此。我在别人的眼中也许是个异数,又或许说沉浸于文字中的我是个异数。孤独的沙漠里,我愿是那荒丘,当西下的落日照着我一片赭金。四下静悄悄的,闻不到商队驼铃的叮当,没有狂风携沙来肆虐,只觉得一阵飒飒的晚风吹拂我的肌缕……
深夜里,如果我突然的惊醒,然后再也无法安睡了!那一定是我内心在百转千回,一个少年在成长的历程里,该是会遇见很多不安与荒愁吧!辗转反侧 ...
暮春游富春江
忽想暮春某日,与友自桐庐览富春江,吾辈纵舟江上,任之东西,一路落英缤纷,鸟声上下。抬眼处千峰万壑,碧色涟涟,花树自芳菲。时有烟村四五家,柴门小径,令人有隐逸之想。
吾与友相坐船尾,倏忽游鱼跃出水面,又潜入水中与吾舟并游,余大喜指之告友曰:“此鱼之乐也。”友欣然笑曰:“昔日庄子与惠子游于濠梁之上,见鱼儿悠然游弋,有此一对,今已千年,物是人非,而情之相似若此。”余欣然其言,肃然端坐取所藏素琴援琴应之。
日中,至乌龙,为兰江与新安江并流处,水湍清澈,山色竞秀,中有高峰一簇,丘峦环之。至其下,吾与友弃舟访岸,着屐而上。山石细碎,萦纡环回。半途歇于桐花树下,桐花扑嗒落肩上,叫人一怔。远处双鸟飞来,相随起落枝头,令人往羡。友自唱清歌,声环万籁。余执朱笔于一青岩处书曰: 山川静毓,行歌相答。
稍留片刻,复行,不觉至峰顶,眼界始阔,苍苍莽莽,榛榛葱葱,无穷无极。余二人渺立,呼啸山风。当是时,振臂一呼,仿佛纵身一赴,便染得,千寻碧。世间万种羁縻何所谓也,旋即泪下,是无由,也无因。