金融做网站,公众号投票怎么制作,深圳成交型网站建设公司,个人做商城网站大概多少钱题目
刷题做到力扣 3014#xff0c;题目要求设计电话键盘上的按键映射#xff0c;返回按出 word 单词的最小按键次数#xff0c;1 ≤ word.length ≤ 26#xff0c;且仅由小写英文字母组成#xff0c;所有字母互不相同
我的题解
简单题#xff0c;略加思索拿下#x…
题目
刷题做到力扣 3014题目要求设计电话键盘上的按键映射返回按出 word 单词的最小按键次数1 ≤ word.length ≤ 26且仅由小写英文字母组成所有字母互不相同
我的题解
简单题略加思索拿下
public int minimumPushes(String word) {// 1 word.length 26if (word.length() 8) return word.length();else if (word.length() 16) return 8 2 * (word.length() - 8);else if (word.length() 24) return 8 16 3 * (word.length() - 16);else return 8 16 24 4 * (word.length() - 24);
}这是一个基于条件逻辑的解决方案很朴素
其他题解中关于易读性的思考
提交看看别人的题解
public int minimumPushes(String word) {int n word.length();int k n / 8;return (k * 4 n % 8) * (k 1);
}这个题解显然是更简洁的但我数学不好确实没办法一次性读懂在已经理解题目的前提下
于是阅读题解的说明原来是利用了求和公式
8 ⋅ (1 2 ⋯ k) 4k (k 1)
由上在加上剩余的 n mod 8 个字母需要按下的 k 1 次得到答案
4k (k 1) (n mod 8)(k 1) (4k n mod 8)(k 1)
作为力扣的算法题解数学的部分在文章里说明白了即可代码中不带注释也正常。而我想在实践中写这样的代码时是需要补充对公式化简的注释说明的因此在这里抛砖引玉先给出我的改进
public int minimumPushes(String word) {int n word.length();int k n / 8;// 8 * (1 2 ... k) (n % 8) * (k 1) (k * 4 n % 8) * (k 1)return (k * 4 n % 8) * (k 1);
}GPT-4 的简化
另外附上 GPT-4 对题解的简化结果我认为是相对更晦涩的不建议采用
public int minimumPushes(String word) {int length word.length();if (length 8) return length;int basePushes 8; // 第一个8字符需要8次按键length - 8; // 减去第一部分的长度int extraPushes 2; // 超过8个字符后每增加1个字符按键次数增加的倍数从2开始while (length 8) {basePushes 8 * extraPushes; // 按当前倍数增加按键次数length - 8; // 减去处理过的长度extraPushes; // 增加倍数}basePushes length * extraPushes; // 处理剩余长度return basePushes;
}