leetcode 660. Remove 9

257 篇文章 17 订阅

Start from integer 1, remove any integer that contains 9 such as 9, 19, 29...

So now, you will have a new integer sequence: 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, ...

Given a positive integer n, you need to return the n-th integer after removing. Note that 1 will be the first integer.

Example 1:

Input: 9
Output: 10

Hint: n will not exceed 9 x 10^8.

哈哈,这道题很有意思。我晚上睡觉前躺在床上睡不着,就开始思考这道题,然后灵光一闪:

直接求出这个数的九进制不就好了?(二进制的数不出现2,...同理九进制的数也不会出现9)从1开始到第n个数,碰到8就跳到10,碰到18就跳到20,碰到88就跳到100,这不就类似于九进制的进位吗。因此第n个数,只要求n的九进制如何表示就好了。

//将十进制数n 转化为九进制数
public int newInteger(int n) {
	int result=0;
	int base=1;
	while(n>0){
		result=result+ n%9 * base;
		base=base*10;
		n=n/9;
	}
	return result;
}
大神思路跟我一样,然后用的是java自带的转化进制方法:
public int newInteger(int n) {
    return Integer.parseInt(Integer.toString(n, 9));
}
大神解释如下:十进制的序列: 1, 2, 3, 4, ... 如果把所有不包含 9 的数都排除在外,那么剩下可以用的数字就是 0~8 ,因此可以用九进制来做,因此九进制的序列包含了使用 0~8 来组成数字的所有可能性,而且保证数字序列 are  in ascending order and increment by one 。

有人提出了疑问:如果题目中把 remove 9 换成 remove 7,又如何做呢?https://discuss.leetcode.com/topic/99244/what-if-remove-number-7 。因为题目比较新所以还没有多少人回答,不过可以持续关注一下这个topic.

有人回答说:I think remove 7 is same as remove 9 with mapping 7->8, 8->9. For example, you get answer as 18317 and the final answer would be 19318. 不知道这个思路对不对哎,我试了几个例子好像都可以?


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值