几个算法题

1、 输入n和a,求s = a + aa + aaa + aaaa + aa...a的值,其中n、a是数字。例如n=5,a=2时,求2 + 22 + 222 + 2222 + 22222的值。

function getSum(n : number,a : number): number{
  let sum = 0;
  for(let i = n;i > 0;i--){
   sum+=a * Math.pow(10,n-i) * i;
  }
  return sum;
}

优化

function getSum(n: number, a: number): number {
    return a * (Math.pow(10, n + 1) - 9 * n - 10) / 81
}

2、给定2个字符串str1,str2,如果str1和str2中出现的字符种类一样且出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词

例: str1="123" ,str2="231",返回true。str1="123",str2="2331",返回false

function isInflectedWords(str1: string, str2: string): boolean {
    if (str1.length !== str2.length) return false;
    const len = str1.length;
    let map = new Map();
    for (let i = 0; i < len; i++) {
        const key1 = str1[i];
        const key2 = str2[i];
        if (key1 === key2) continue;
        if (!map.has(key1)) map.set(key1, 1);
        else map.get(key1) + 1 === 0 ? map.delete(key1) : map.set(key1, map.get(key1) + 1);
        if (!map.has(key2)) map.set(key2, -1);
        else map.get(key2) - 1 === 0 ? map.delete(key2) : map.set(key2, map.get(key2) - 1);
    }
    return map.size === 0;
}

3、给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:左括号必须用相同类型的右括号闭合。括号必须以正确的顺序闭合。

示例 1: 
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
function isClosure(str: string): boolean {
    const map = function () {
        let m = new Map();
        m.set('{', '}');
        m.set('[', ']');
        m.set('(', ')');
        return m;
    }();
    let stack: string[] = [];
    for (let i = 0; i < str.length; i++) {
        if (stack.length !== 0 && map.get(stack[stack.length - 1]) === str[i]) stack.pop();
        else stack.push(str[i]);
    }
    return stack.length === 0;
}

posted @ 2025-04-02 21:47  彭乐祥  阅读(41)  评论(0)    收藏  举报