求解代码publicintfindKthNumber(intn,intk){intcur1;// 从字典序第一个数字 1 开始k--;// 转换为 0 索引while(k0){// 计算以cur为根的子树包含的有效节点数量intstepsgetSteps(cur,n);if(stepsk){// 目标不在当前子树跳过整棵子树更新k和当前节点k-steps;cur;}else{// 目标在子树中进入子节点k减1跳过当前节点cur*10;k--;}}returncur;}// 计算以cur为根节点的子树中n的节点总数privateintgetSteps(intcur,longn){intsteps0;longfirstcur;// 当前层起始节点longlastcur;// 当前层结束节点while(firstn){// 累加当前层的节点数防止last超出nstepsMath.min(last,n)-first1;// 进入下一层first*10;lastlast*109;}returnsteps;}小贴士k--是为了将1-based的输入转换为0-based计数first/last必须用long类型避免int乘法溢出