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;
}
