济南1951年建站,江西seo推广,大学生网页设计代码,网站公司模板求解代码 public int findKthNumber(int n, int k) {int cur 1;// 从字典序第一个数字 1 开始k--;// 转换为 0 索引while (k 0) {// 计算以cur为根的子树#xff0c;包含的有效节点数量int steps getSteps(cur, n);if (steps k) {// 目标不在当前子树#xff0c;…求解代码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乘法溢出