菜鸟仓库的编号问题

菜鸟仓库是一个很大很神奇的地方,各种琳琅满目的商品整整齐齐地摆放在一排排货架上,通常一种品类的商品会放置在货架的某一个格子中,格子设有统一的编号,方便工人们挑选。有一天沐哲取菜鸟仓库参观,无意中发现第1个货架格子编码为1,第2-3个分别为1,2,第4-6个格子分别是1,2,3,第7-10个格子编号分别是1,2,3,4,每个格子编号都是0-9中的一个整数,且相邻格子的编号连在一起有如下规律 1|12|123|1234|…|123456789101112131415|…|123456789101112131415…n 这个仓库存放的商品品类非常丰富,共有1千万多个货架格子。沐哲很好奇,他想快速知道第k个格子编号是多少?

采用蛮力搜索的方法,逐步循环,直到找到第K位。用cnt计数器,记下迄今为止的仓库数目,一旦从cnt==K 那么返回当前的号码,即为第K个货架的编号。

注意:

1:对多位数字字符化;用字符串存储,同时 输出的编号也是字符的形式,

2:代码编写注意 

  • 数字转字符 Integer.toString();  从控制台读数时的 Scanner 类,import java.util.Scanner;
  • 多重循环的退出问题,找到cnt==K,时,return number; break 只能退出本循环,i,j循环怎么退呢?
  • 答:在外层i,j 循环的判断语句中加一个 flag 判断 
package leetcode;

import java.io.InputStream;
import java.util.Scanner;

public class numberKofRack {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		System.out.print("请输入K:");
		Scanner scan = new  Scanner(System.in);
		int  K = scan.nextInt();
		char num = numberK(K);
		System.out.print(num);			
	}
	public static  char numberK(int K){
		if(K<=0)
			return 0;
		int cnt = 0;String s;char number = 0 ;int flag =0;
		for(int i=1;i<= K && flag ==0;i++){
			for(int j=1;j<=i && flag ==0;j++){
				 s = Integer.toString(j);
				for(int n=0;n<s.length();n++){
					cnt++;
					if(cnt==K){
						flag = 1;
						number = s.charAt(n);
						break;
					}	
				}	
			}
		}
		return number;
	}
}


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值