zoukankan      html  css  js  c++  java
  • leetcode 660. Remove 9

    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.

    首先预处理出 i 位数多出来多少,比如n是1位数,那么就多出1,n是两位数那么就多出19。

    然后对于题目中的n  比如 n = 109,我们首先判断他在增加后是几位数,109 > 9     ,  109 > 100 - 19 ,109 < 1000 - 271  所以n是三位数,那么相应的ans就加上100,然后处理剩下的n(这时的n不是n-100而是n-100 + 19)。

    集体看代码吧,这不好描述。。。。

    class Solution {
    public:
        typedef long long ll;
        ll sum[11] = {0};
        ll d[11] = {0};
        void init() {
            int x = 1;
            sum [1] = 1;
            d[1] = 1;
            for (int i = 2; i <= 10; ++i) {
                d[i] = sum[i - 1] * 8 + (ll)pow(10.0,i-1);
                sum[i] = sum[i - 1] + d[i];
            }
        }
        int newInteger(int n) {
            init();
            ll x = 10,ans = 0;
            while (n > 9) {
                ll tmp = n;
                x = 0;
                for (int i = 1; i <= 10; ++i) {
                    if (n  >= pow(10,i) - sum[i]) continue;
                    else {
                        x = i;break;
                    }
                }
                n -= pow(10.0, x - 1);
                n += sum[x - 1];
                ans += pow(10.0, x - 1);
            }
            if (n == 9) ans ++;
            return ans + n;
        }
    };

    看到网上也有把10进制转换到9进制去搞的。。http://www.cnblogs.com/pk28/p/7356218.html

  • 相关阅读:
    Adobe Photoshop cs6 破解方法
    vs2008试用90天破解方法
    Install win8_pro using UltraISO
    面试题-100盏灯问题
    PHP 博客文集 1 Veda原型 成功,唯有积累,没有奇迹
    php 框架
    php 语法2
    干货 连接
    试题 极客学院
    地图
  • 原文地址:https://www.cnblogs.com/pk28/p/7356218.html
Copyright © 2011-2022 走看看