首页 > 其他分享 >剑指Offer

剑指Offer

时间:2023-09-07 16:57:49浏览次数:38  
标签:count index digit Offer int digitNum 几位数

题目链接:

题目描述:

解法思路:

代码:

func findNthDigit(n int) int {

    // 1、确定是几位数( -10-90-900-9000等)
    // 2、确定是几位数的第几位数(求第n位数是属于哪一个数的)
    // 3、确定是 属于那个数的第几位

    digit,digitNum,count := 1,1,9  //digit 表示是几位数;digitNum 表示n位数的数量级(与count相乘得到n位数的数量)
     // 1、确定是几位数( -10-90-900-9000等)
    for n > count{
        n -= count
        digit++
        digitNum *= 10
        count = 9*digit*digitNum
    }
    // 2、确定是几位数的第几位数(求第n位数是属于哪一个数的)
    num := digitNum + (n-1)/digit

    // 3、确定第n位是
    index := (n-1)%digit
    //return getDigit(num, index, digit)
    // 或者 (利用z)
    return int(strconv.Itoa(num)[index]-'0')
}
//获取整数n的第index位,如871的第0位为8
func getDigit(n, index, digit int) int {
    k := digit - index - 1
	for k > 0 {
		n = n / 10
        k--
	}
	return n % 10
}

标签:count,index,digit,Offer,int,digitNum,几位数
From: https://www.cnblogs.com/lxing-go/p/17685407.html

相关文章

  • 剑指Offer 43. 1~n 整数中 1 出现的次数
    题目链接:剑指Offer43.1~n整数中1出现的次数题目描述:解法思路:代码:funccountDigitOne(nint)int{ //思路 ifn==0{ return0 } //求出该数的各个位上的数字,保存到nums中 varnums[]int tmp:=n fortmp!=0{ a:=tmp%10 nums=append(nums,a)......
  • 剑指 Offer 57 - II. 和为s的连续正数序列
    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1:输入:target=9输出:[[2,3,4],[4,5]]示例2:输入:target=15输出:[[1,2,3,4,5],[4,5,6],[7,8]]classSolution{publici......
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列
    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:5/\26/\13示例1:输入:[1,6,3,2,5]输出:false示例2:输入:[1,3,2,6,5]输出:truec......
  • 剑指 Offer 42. 连续子数组的最大和
    输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。 示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组[4,-1,2,1]的和最大,为6。classSolution{publicintmaxSubArray(int[]nums){......
  • 剑指 Offer 43. 1~n 整数中 1 出现的次数(困难)
    题目:classSolution{public:intcountDigitOne(intn){//mulk表示10^k//在下面的代码中,可以发现k并没有被直接使用到(都是使用10^k)//但为了让代码看起来更加直观,这里保留了klonglongmulk=1;intans=0;......
  • 剑指 Offer 41. 数据流中的中位数
    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4]的中位数是3[2,3]的中位数是(2+3)/2=2.5设计一个支持以下两......
  • 剑指 Offer 20. 表示数值的字符串
    说实话本题虽然不难,但是对边界问题的处理超乎想象(一不小心就越界访问),”简单“的难度还是说明博主本身太菜了。本题的主要考点是双指针以及对标准库(对c++来说)一些函数的运用。处理的中心思想是:先将整个字符串反转,而后再通过双指针提取其中的各个单词,而后再将其反转。这样的处理......
  • 剑指 Offer 65. 不用加减乘除做加法(简单)
    题目:classSolution{public:intadd(inta,intb){while(b){//总体思路:上一次产生的进位数*进制数+本位数,进制数为0的时候直接返回本位数即可intcarry=a&b;//计算进位a=a^b;//计算本位b......
  • 剑指 Offer 15. 二进制中1的个数(简单)
    题目:classSolution{public:inthammingWeight(uint32_tn){intresult=0;for(inti=0;i<32;i++){if(n&(1<<i))result++;//利用按位与}returnresult;}};......
  • 《剑指Offer》-68-二叉树的最近公共祖先
    二叉搜索树 TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){ //如果p、q一定存在,那么root就一定不是空指针 TreeNode*traverse=root; while(true){ if(p->val<traverse->val&&q->val<traverse->val)traverse=tra......