题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 解题思路 本题解题思路与存在重复数字的数组的全排列思路相同.需要完成排列去重的工作.因而工作分为两步.第一,确定当前数组元素的全排列:第二,对排列结果去重. 1.无论对于数组还是字符串,使用递归实现全排列的过程最容易,对于一个字符串…
剑指 Offer 67. 把字符串转换成整数 Offer_67 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/2/15 23:13 */ /** * 题目描述:写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. */ public class Offer_67 { public int strToInt(String…
题目 剑指 Offer 67. 把字符串转换成整数 思路1 根据题意,要解决这题,首先要判断的条件有: 不包括首位空格 第一位必须为:+.-.数字三者其一,否则不合法 数字必须连续的,如果遇到非数字,结束判断 判断结果要在 \(-2^{31}\)~\((2^{31}-1)\) 之间,如果超过的话,就输出最大值 / 最小值 我们用sign记录符号.res记录每次遍历累加的值.threshold记录阈值(我们阈值取Integer.MAX_VALUE/10,即小了一位数,作用后面再说).index记录…
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 题目分析 这题还算可以,关于全排列,有两种解法,第一种就是递归全排列法,第二种就是回溯法. 递归全排列法: 就是剑指offer上的做法,也比较容易理解,不过挺少人答的也就是 把字符串分为两部分:第一部分为第一个字符,第二部分为第一个…
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25002199 剑指offer上的第四道题目,在九度OJ上測试通过,但还是有些问题.由于是用C语言实现的,因此,要提前开辟一个比較大的空间来存储输入的字符串.而假设在线測试系统的測试用例中字符串的长度大于该最大值的话.会报RE,可是九度OJ的測试用例没有大于我所设定的字符串的最大值.当然,这道题目用C++中的string类或java中的String类实现会更好,不须要操心输入字符串的长度.…
  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不能使用atoi或者其他类似的库函数. 思路 题目很简单,主要就是实现对每个字符转化为数字,并进行累加即可.但是有很多特殊情况都需要考虑进去,例如null.空字符串.带有正负号.字符不是数字.溢出等等. 对于非法的特殊输入,返回值为0,还要用一个全局变量进行标记. 写代码时一定要考虑清楚各种测试用例.…
该题目来源于牛客网<剑指offer>专题. 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入描述: 输入一个字符串,包括数字字母符号,可以为空. 输出描述: 如果是合法的数值表达则返回该数字,数值为0或者字符串,不是一个合法的数值则返回0. ​ Go语言实现: //0-9的ascii码分别是48-57,"-"是45,"+"是43 func strToInt(str string) int { length := len(str) i…
剑指 Offer 27. 二叉树的镜像 知识点:二叉树:递归:栈 题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 示例 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1] 解法一:递归法 函数功能:二叉树镜像: 1.终止条件:root==null的时候,返回null: 2.每个节点该做什么:将两个孩子节点互换: 3.什么时候做:递去的时候或者回来的时候都行(前序或者后序都行) /** * Definition for a binary tre…
1.1.题目1 剑指 Offer 59 - I. 滑动窗口的最大值 1.2.解法 解题思路:(来自作者bigbeats) 相当于维护一个最大队列(队头元素最大,向队尾非严格递减) 在未形成窗口前,先构造完整窗口. 在形成窗口后,移动窗口: 判断即将失去的这个左边界值是否是最大值,如果是需要从最大队列中删除这个最大值. 再让队列尾部开始与即将加入的右边界值做对比,如果队列尾部元素大于或等于这个元素,则将这个元素加入尾部,反之将尾部元素删除. 以上两步操作保证队列的顺序是非严格递减的,即队头存放最大…
  题目描述:   输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba.   输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母.   解题思路:   对于这个问题,我们同样可以采用分解的办法.要求整个字符串的排列,可以看成两步:第一步:求所有可能出现在第一个位置的字符,即把第一个字符与后面的字符依次交换.第二步:固定一个字符,求后面所有字符的排列…