进制转换(二) - 进阶

简介: 进制转换(二) - 进阶

一、概念

转化不常用的进制对应偏移

二、模板

看例题

三、例题

题:202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。
  • 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

1 <= n <= 231 - 1

解:

解题思路:双指针 => 链表找环

情况1:
在这里插入图片描述
情况2:
在这里插入图片描述
情况3:值会越来越大,最后接近无穷大。(排除)

AC代码:

class Solution {
    public boolean isHappy(int n) {
        int l = n, f = getNext(n);
        while(f != 1 && l != f) {
            l = getNext(l);
            f = getNext(getNext(f));
        }
        return f == 1;
    }
    int getNext(int num) {
        int x = 0;
        while(num != 0) {
            int digit = num % 10;
            x += digit * digit;
            num /= 10;
        }
        return x;
    }
}

题:168. Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

例如:

A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28 
...

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

提示:

1 <= columnNumber <= 231 - 1

解:

解题思路:数学模拟

AC代码:

class Solution {
    public String convertToTitle(int columnNumber) {
        StringBuilder res = new StringBuilder();
        while(columnNumber != 0) {
            int digit = (columnNumber - 1) % 26 + 1; // 1-26对应
            res.append((char)('A' + digit - 1));
            columnNumber = (columnNumber - digit) / 26; // 这里要减去digit
        }
        return res.reverse().toString();
    }
}

解题思路:因为有错位问题,所以这里有简洁的写法

$$ 0<a_0-1<25 $$AC代码: ```java class Solution { public String convertToTitle(int columnNumber) { StringBuilder res = new StringBuilder(); while(columnNumber != 0) { -- columnNumber; res.append((char)('A' + columnNumber % 26)); columnNumber = columnNumber / 26; } return res.reverse().toString(); } } ``` ## 题:171. Excel 表列序号 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle = "A" 输出: 1 示例 2: 输入: columnTitle = "AB" 输出: 28 示例 3: 输入: columnTitle = "ZY" 输出: 701 提示: 1 <= columnTitle.length <= 7 columnTitle 仅由大写英文组成 columnTitle 在范围 ["A", "FXSHRXW"] 内 ## 解: 解题思路:`数学模拟` AC代码: ```java class Solution { public int titleToNumber(String columnTitle) { int x = 0; for(char c : columnTitle.toCharArray()) { x = x * 26 + (int)(c - 'A' + 1); } return x; } } ``` ## 题:483. 最小好进制 以字符串的形式给出 n , 以字符串的形式返回 n 的最小 `好进制 ` 。 如果 `n` 的 ` k(k>=2) `进制数的所有数位全为1,则称 `k(k>=2)` 是 `n` 的一个 好进制 。 示例 1: 输入:n = "13" 输出:"3" 解释:13 的 3 进制是 111。 示例 2: 输入:n = "4681" 输出:"8" 解释:4681 的 8 进制是 11111。 示例 3: 输入:n = "1000000000000000000" 输出:"999999999999999999" 解释:1000000000000000000 的 999999999999999999 进制是 11。 提示: n 的取值范围是 [3, 1018] n 没有前导 0 ## 解: 解题思路:`数学推导` AC代码: ```java class Solution { public String smallestGoodBase(String n) { long m = Long.parseLong(n); int max = (int)(Math.log(m) / Math.log(2) + 1); for (int len = max; len >= 3; len--) { long k = (long)Math.pow(m, 1.0 / (len - 1)); long res = 0; for (int i = 0; i < len; i++) res = res * k + 1; if (res == m) return String.valueOf(k); } return String.valueOf(m - 1); } } ```

相关文章
|
关系型数据库 MySQL 数据库连接
QT安装mysql驱动和使用ODBC连接mysql
上一篇博文中提到了mysql的使用,但是很多人在使用新版Qt连接mysql的时候出现连接不上或者是没有mysql驱动的问题,网上有很多博文写了这个问题。但是对于最新版的mysql,使用网上的那些编译办法无法完全解决driver not loaded的问题,接下来我将写一篇文章详细的说一下如何解决该 问题,并且介绍一下除了使用驱动连接mysql,还可以使用odbc连接mysql。
1280 0
|
存储 缓存
ETag的值是如何在HTTP响应中传递给客户端的
ETag的值是如何在HTTP响应中传递给客户端的
|
机器学习/深度学习 分布式计算 搜索推荐
运用大数据分析提升返利App的市场营销效果
运用大数据分析提升返利App的市场营销效果
|
JSON Cloud Native Java
通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能
通过 Higress Wasm 插件 3 倍性能实现 Spring-cloud-gateway 功能
473 85
|
11月前
|
安全 网络安全 Android开发
探索安卓与iOS的安全性差异:一场永无止境的较量
在移动操作系统的浩瀚星海中,安卓与iOS如同双子星般璀璨夺目,各自引领着一方天地。它们不仅在用户界面设计、应用生态和设备兼容性上各有千秋,更在安全性这一核心领域展开了激烈的较量。本文旨在深入剖析安卓与iOS在安全性方面的显著差异,通过对比分析,揭示两者在隐私保护、系统更新、权限管理以及恶意软件防御等方面的不同策略与实践。同时,我们也将展望未来,探讨这两大操作系统在安全性上的发展趋势,以及它们如何应对日益严峻的网络安全挑战。
186 8
|
XML Java 数据库连接
springboot中整合mybatis及简单使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis,包括依赖引入、配置数据源、创建测试表、编写Mapper接口和XML文件、以及创建Service和Controller层的步骤。
springboot中整合mybatis及简单使用
|
Ubuntu Linux 开发工具
linux离线安装docker与compose
linux离线安装docker与compose
503 0
|
搜索推荐 JavaScript Java
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
Elasticsearch 8.X 如何依据 Nested 嵌套类型的某个字段进行排序?
|
存储 供应链 搜索推荐
【深度观点】资源数字化、数字资产化与资产数权化是分布式商业运行的核心要素
分布式商业的运作逻辑是以资源和能力要素为后端,以数字化资源为关键生产要素,以分布式网络(web3.0)为市场资源配置纽带,前端洞察出需求后,资源、资产、人才等能力要素则迅速向解决消费者的需求去倾斜,资源云化,资产数权化,随需而取,随需转移,从而实现供需资源的有效匹配。
【深度观点】资源数字化、数字资产化与资产数权化是分布式商业运行的核心要素
|
算法 数据安全/隐私保护 C++
RSA密码算法C++实现
RSA密码算法C++实现
569 0