首页 » 技术分享 » 左耳听风第二周

左耳听风第二周

 

左耳听风第二周

每周完成一个ARTS: 每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)

Algorithm

  1. 最大回文数乘积 链接 解题语言 C#

题目 :

你需要找到由两个 n 位数的乘积组成的最大回文数。

由于结果会很大,你只需返回最大回文数 mod 1337得到的结果。?
示例:

输入: 2

输出: 987

解释: 99 x 91 = 9009, 9009 % 1337 = 987

说明:

n 的取值范围为 [1,8]。


【 参考代码 】

public class Solution
    {
       public int LargestPalindrome(int n)
        {
            if (n == 1)
            { return 9; }
            int max =(int)Math.Pow(10,n)-1;
            for (int i= max-1; i>max/10;i--)
            {
                StringBuilder str = new StringBuilder();
                foreach (var j in i.ToString().Reverse())
                {
                    str.Append(j);
                }
                long maxNum = Convert.ToInt64(i.ToString()+str.ToString());//因为当 n>1 时,最大的回文数的位数一定为 2n 位,左右一定对称,这里缩小循环的遍历范围
                for (long x = max; x * x >= maxNum; x--)
                    if (maxNum % x == 0)
                        return (int)(maxNum % 1337);
            }
            return 0;
        }
    }

这道题的难点在于缩小循环遍历的范围,只用暴力在n=4 的时候就会超时。 首先 当 n>1 时 最大回文数的位数 必定为 2n ,这样我们就能把 回文数分成左右两部分, 然后重点在于内嵌的 for 循环 x的平方要 大于等于此时的最大 回文数 此时才能保证最终找到的回文数是最大的那个。 代码的思想参考了网上的答案, 希望能在下周有所进步。

Review

How To Ask Questions The Smart Way
(英文版)链接
(中文版)链接
文章是耗子叔在专栏 程序员练级攻略–修养篇 推荐过的,不知道有多少人看下去了呢,英文版真的很长?
感悟:文章主要时讲述计算机方面如何更好的提问以及如何更好的回复别人的问题, 但实际可以很好的运用在各个学科的问答环节中。
首先, 明确一点好的问题大家一定是愿意回答的, 因为这会让人发散思维, 从而提高自己 。 所以在提问前先问自己 : 是否问了正确的问题 ? 是否问了正确的人?

摆正问问题的心态

通常我们总是习惯性的向朋友提问, 很多时候我们会因为没有收到自己心仪的回答而气急败坏, 这是很错误的思维。 在当前的社会背景下, 付费尚且不一定能得到满意的答复又何必奢望别人免费且义务性的回答我们的问题呢? 这种不劳而获的思想本身就是错误的。 所以在问问题之前先摆正自己的心态,别人回答我们的问题, 我们要学会感谢, 不回答我们的问题本是应该而不气急败坏的咒骂。

自己动手丰衣足食

先谷歌, 再求人。 别人的回应肯定是要一定的时间的, 与其耽误别人的时间欠下别人的人情, 不如自己动手把问题解决了, 即使没有, 你的努力也会让你更接近答案、别人也乐于帮助主动性强的人。重要的一点是, 你要明白。最有可能给你有用答案的人, 往往是你身边最忙的人。 ( 如果不会翻墙就用必应代替谷歌把 , 至少比百度搜索出来的东西更贴近你的需要 )

问对人

专业的事情找专业的人做。 不要总是做 问体育老师 数学问题这种事。 旁观者的你肯定觉得好笑。 可是技术社区, 跑到后端语言社区问前端项目问题的不在少数, 虽然也有可能收到正确的答案, 但通常你向数学老师请教会更快的收到正确的答案, 可能他还会告诉你解决相同的方法, 给你做一个深入的讲解, 而不是只丢给你一个有可能正确的答案或是过程。 信息时代, 效率至上。

学会简化问题

在讲清楚问题的同时, 尽可能的简化语言。 正确的提问不要将别人宝贵的时间 浪费在 “ 在不在 ”“ 能不能帮我个忙 ” 这种无意义的对白上。 下次问问题找人帮忙之前, 先发个小红包, 然后直接说问题。 你会收到更多有意义的回复, 这一部分节约的时间的价值远大于你发出去的小红包。
说清问题, 再说推断
先描述清楚问题的整体情况再提出自己对问题的推断。 通常来说, 自己所推断的方向是错误的, 因为如果是对的, 自己就能把问题解决了何必要麻烦别人来帮忙? 所以过早的提出你对问题的推论, 很有可能带偏别人的思考, 往往会耽误你解决问题的时间。

留下答案

将别人给你的答案在你问题的结尾或标题标注。 你所提问的或许正是别人所需要的。 赠人玫瑰, 手有余香。 请传承好真正的黑客精神( 开源 )。

授人以鱼,不如授人以渔

更多用解决问题的思路来代替简单的给人答案。

宽容初学者

毕竟大家都是从小菜鸡过来的, 谁没经历过百度都不会的时期呢。

不会不说

不去故意的误导别人, 不把不缺定的答案用肯定且真理的口气说出来, 摸棱两可的答案可说但请注明。 损人不利己之事不可做。

Tip

https://github.com/limedroid/HexoLearning
Hexo + GitHub 搭建自己的博客, CSDN的博客广告太多了, 这样非常影响别人浏览的用户体验,后面文章多起来了肯定还是要有自己的博客的, 可以先参照教程搭建一下先做准备。

share

文章链接

分享的是我根据耗子叔 《 程序员练级攻略 》推荐的 C 语言的书 《 C 语言程序设计 现代方法 》第二版 第二星期的笔记整理, C 语言学到以前没有接触的指针, 进度已经远没有第一周那么快了, 关键还是要弄清楚 指针什么时候指向地址 ,什么时候代表值, 话说 C语言指针的骚操作真不少。

转载自原文链接, 如需删除请联系管理员。

原文链接:左耳听风第二周,转载请注明来源!

0