查看: 1528| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

来一道google真题

🔗
dimi | 只看该作者 |倒序浏览
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
把所有正数連接起来
比如
12345678910111213141516
问第n位数字除以三余几。
这题目有啥好算法?

评分

参与人数 1大米 +5 收起 理由
pengzewen37 + 5 感谢分享!

查看全部评分


上一篇:share一个自己写的leetcode刷题的chrome插件
下一篇:【东湾】fremont/union city/newark招一起刷题的小伙伴
🔗
alpher 2016-3-31 07:52:02 | 只看该作者
全局:
本帖最后由 alpher 于 2016-3-31 07:53 编辑

return  (n % 3) & 1
回复

使用道具 举报

🔗
kavfwu 2016-3-31 11:26:26 | 只看该作者
全局:
A straight-forward brute-force solution.
首先计算出第n个数字属于第几个数。对数字进行观察,有以下特征:
1-9: 共9个数,每个数只有1位
10-99:共90个数,每个数有2位
100-999: 共900个数,每个数有3位
...
以此类推,从10^(n-1)到10^n-1,共9*10^(n-1)个数,每个数有n位
通过这个规律,我们可以用一个循环来寻找n落在哪个区间。
Python:
def find(n):
    digit = 0
    id = 0
    d = 9
    t = 1
    while n > d:
        id += d
        n = n-t*d
        d = d*10
        t = t+1
    id += n/t
    n = n%t
    if n==0:
        digit = int(str(id)[-1])
    esle:
        digit = int(str(id+1)[n-1])
    return digit%3


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表